2013-09-16 3 views
2

Я пытаюсь динамически построить IQueryable, который будет проверять, существует ли в описании количество строк.Динамически строить IQueryable OR Statement

Используя SQL, это может быть легко достигнуто за счет наличия нескольких операторов OR.

но как я могу это сделать с помощью LINQ?

вот мой код до сих пор ...

List<string> keywords = new List<string>() { "BMW", "M3" }; 

IQueryable<AuctionVehicle> Results = 
       from a in DBContext.tbl_Auction 
       join v in DBContext.tbl_Vehicle on a.VehicleID equals v.VehicleID 
       where v.Fuel.Equals(Fuel) 
       && v.Transmission.Equals(Transmission) 
       && a.EndDate < DateTime.Now 
       select new AuctionVehicle() 
       { 
        DB_Auction = a, 
        DB_Vehicle = v 
       }; 

// Keywords 
if (keywords.Count == 1) 
{ 
    Results = Results.Where(x => x.DB_Auction.Description.Contains(keywords[0])); 
} 
else if (keywords.Count > 1) 
{ 
    // **************************** 
    // How can i add multiple OR statements?? 
    // **************************** 
    Results = Results.Where(x => x.DB_Auction.Description.Contains(keywords[0])); 
    foreach (string keyword in keywords) 
    { 
     Results = Results.Where(x => x.DB_Auction.Description.Contains(keyword)); 
    } 
} 

return Results; 

ответ

2

Вы можете заменить:

if (keywords.Count == 1) 
{ 
    Results = Results.Where(x => x.DB_Auction.Description.Contains(keywords[0]));  
} 
else if (keywords.Count > 1) 
{ 
    Results = Results.Where(x => x.DB_Auction.Description.Contains(keywords[0])); 
    foreach (string keyword in keywords) 
    { 
     Results = Results.Where(x => x.DB_Auction.Description.Contains(keyword)); 
    } 
} 

по

Results = Results.Where(x => keywords.Any(y=>x.DB_Auction.Description.Contains(y))); 

Таким образом, в конце концов, вы можете добавить это в вас LINQ:

where keywords.Any(x=>a.Description.Contains(x)) 
Смежные вопросы