如何使用多个可选参数编写 Linq To Entities
How to write Linq To Entities with multiple optional parameters
我有一个 table 名为 Items(Name,Description)
用户可以根据名称、描述或两者来搜索项目。 (实际 table 有大约 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();
}
如果您想删除此代码段中的第二行:
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;
我有一个 table 名为 Items(Name,Description)
用户可以根据名称、描述或两者来搜索项目。 (实际 table 有大约 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();
}
如果您想删除此代码段中的第二行:
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;