如何在LlNQ where子句中添加两个以上的条件?



我有一个LINQ查询有超过2个where条件,但它似乎不评估超过2个条件。有没有办法在where子句中添加更多的条件?

var query = 
   from f in XElement.Load(MapPath("flightdata3.xml")).Elements("flight")
   where (string)f.Element("departurelocation") == From && 
         (string)f.Element("destinationlocation") == DestCity &&
         (string)f.Element("airline") == Airline
         // && (string)f.Element("departuredate") == DepartDate && 
         // (string)f.Element("departuretime")==DepartTime
         //&& (string)f.Element("returndate")==ReturnDate && 
         //(string)f.Element("returntime")==ReturnTime
   orderby Convert.ToInt32(f.Element("price").Value)
   select new
   {
      FlightNumber = (Int32)f.Element("flightnumber"),
      Airline = (string)f.Element("airline"),
      Departure = (string)f.Element("departureairportsymbol"),
      DepartTime = (string)f.Element("departuretime"),
      Destination = (string)f.Element("destinationairportsymbol"),
      ArrivalTime = (string)f.Element("arrivaltime"),
      Stops = (int)f.Element("numberofstops"),
      Duration = (string)f.Element("duration"),
      Cabin = (string)f.Element("cabin"),
      Price = "$" + (Int32)f.Element("price"),
      ImagePath = (string)f.Element("airlineimageurl").Value
   };

LINQ绝对允许两个以上WHERE条件。您是否尝试将查询分成更易于管理的部分?LINQ使用延迟执行,所以你不会看到这样做的性能损失。

您还应该考虑创建一个类来保存您填充到结果中的信息。

public class FlightDetail
{
    public Int32 FlightNumber { get; set; }
    public String Airline { get; set; }
    public String Departure { get; set; }
    public String DepartureTime { get; set; }
    public String Destination { get; set; }
    public String ArrivalTime { get; set; }
    public Int32 Stops { get; set; }
    public String Duration { get; set; }
    public String Cabin { get; set; }
    public Int32 Price { get; set; }
    public String ImagePath { get; set; }
}

然后像这样更容易读,但也应该帮助你找到任何错误弹出。

var flights = 
   from f in XElement.Load(MapPath("flightdata3.xml")).Elements("flight")
   select new FlightDetail
   {
      FlightNumber = (Int32)f.Element("flightnumber"),
      Airline = (string)f.Element("airline"),
      Departure = (string)f.Element("departureairportsymbol"),
      DepartTime = (string)f.Element("departuretime"),
      Destination = (string)f.Element("destinationairportsymbol"),
      ArrivalTime = (string)f.Element("arrivaltime"),
      Stops = (int)f.Element("numberofstops"),
      Duration = (string)f.Element("duration"),
      Cabin = (string)f.Element("cabin"),
      Price = "$" + (Int32)f.Element("price"),
      ImagePath = (string)f.Element("airlineimageurl").Value
   };
var flightsByLocation = 
   flights.
   where (string)f.Element("departurelocation") == From && 
         (string)f.Element("destinationlocation") == DestCity
   select new FlightDetail
   {
      FlightNumber = (Int32)f.Element("flightnumber"),
      Airline = (string)f.Element("airline"),
      Departure = (string)f.Element("departureairportsymbol"),
      DepartTime = (string)f.Element("departuretime"),
      Destination = (string)f.Element("destinationairportsymbol"),
      ArrivalTime = (string)f.Element("arrivaltime"),
      Stops = (int)f.Element("numberofstops"),
      Duration = (string)f.Element("duration"),
      Cabin = (string)f.Element("cabin"),
      Price = "$" + (Int32)f.Element("price"),
      ImagePath = (string)f.Element("airlineimageurl").Value
   };

拥有多个条件不应该有问题。例如,您可以从Order表中获得如下内容:

var orderDetails = (from o in context.OrderDetails
where o.OrderID == orderID
where o.OrderName == orderName
select o).ToList();

相关内容

  • 没有找到相关文章

最新更新