linq其中条款

问题描述:

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

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

你能张贴一些示例代码吗? – tomasmcguinness 2011-05-03 15:41:55

+0

请提供一些代码.. – 2011-05-03 15:41:57

+0

代码,代码。向我们展示代码。 – 2011-05-03 15:42:05

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(); 
+0

multiv123想要超过2个条件的答案。 – 2011-05-03 15:45:17