linq where子句

时间:2011-05-03 15:40:06

标签: linq

我有一个 LINQ 查询,其条件超过2个,但似乎没有超过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
   };

2 个答案:

答案 0 :(得分:2)

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
   };

答案 1 :(得分:0)

有一个以上的条件不应该有问题。例如,您可以从Order表中获得类似的内容。

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