如何使用多个可选参数编​​写Linq To Entities

时间:2018-07-01 17:21:15

标签: c# entity-framework linq-to-entities entity-framework-core

我有一个名为Items(Name,Description)的表

用户可以根据名称,描述或两者来搜索项目。 (实际表中可以搜索约15个字段,但在此示例中,仅将其保留为两个)。

这将搜索名称和描述。但是我需要它既可以是另一个,也可以是两个。

var source = this.DbContext.Items;

IQueryable<Item> items = source.Where(a => a.Name.Contains(item.Name));

items = items.Where(a => a.Description.Contains(item.Description));

return items.ToList();

这是我想出的最好的结果,但是第二行看起来很时髦。

internal List<Item> Search(Item item)
{
    var source = this.DbContext.Items;
    IQueryable<Item> items = source.Where(a=> a == a);

    if(!string.IsNullOrWhiteSpace(item.Name)) items = items.Where(a => a.Name.Contains(item.Name));

    if(!string.IsNullOrWhiteSpace(item.Description)) items = items.Where(a => a.Description.Contains(item.Description));

    return items.ToList();          
}       

1 个答案:

答案 0 :(得分:1)

如果要删除此代码段的第二行:

var source = this.DbContext.Items;
IQueryable<Item> items = source.Where(a=> a == a);

只需用以下内容替换它们:

// your Linq To Entities query is already an IQueryable<T>
var items = from item in this.DbContext.Items
            select item;

或更简单地删除var关键字:

// There is an implicit conversion between DbSet<T> and IQueryable<T> 
// but you gain from it only if you remove the var keyword and not use the type inference
IQueryable<Item> items = this.DbContext.Items;