动态构建 IQueryable OR 语句

本文关键字:语句 OR IQueryable 构建 动态 | 更新日期: 2023-09-27 18:31:31

我正在尝试动态构建一个IQueryable,它将测试描述中是否存在许多字符串。

使用 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;

动态构建 IQueryable OR 语句

您可以替换:

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))