我如何使用Linq表达式使用反射
本文关键字:反射 表达式 Linq 何使用 | 更新日期: 2023-09-27 18:08:31
我目前有一个情况,我正在执行搜索使用Linq到实体。
如果我想通过客户端的参考代码搜索,我将使用这个方法:GetClientByReference("A01")
public IQueryable<DataLayer.Client> GetClientByReference(String reference)
{
return new DataLayer.DlClient(this.Entities).GetClientByReference(reference);
}
如果我想搜索一个客户的名字,我将使用这个方法:GetClientByName("Joe")
public IQueryable<DataLayer.Client> GetClientByName(String name)
{
return new DataLayer.DlClient(this.Entities).GetClientByName(name);
}
显然,在可扩展性方面,这是非常糟糕的,因为我需要将方法组合在一起,并为每个可搜索字段编写一个(GetClientByDateAndReferenceAndName
??)有没有办法让这个更通用?
理想情况下,我希望能够做这样的事情:
-
GetClient("Reference", "A01")
-
GetClient("Name", "Joe")
-
GetClient("Reference", "A01", "Name", "Joe")
我假设您的DataLayer.DlClient(this.Entities)
返回IQueryable<Client>
:
public IQueryable<DataLayer.Client> GetClientBy(Expression<Func<Client, bool>> filter)
{
return new DataLayer.DlClient(this.Entities).Where(filter);
}
现在你可以
var clients = GetClientBy(client => client.Name == "Joe");
var clients = GetClientBy(client => client.Reference == "A01");
var clients = GetClientBy(client => client.Reference == "A01" &&
client.Name == "Joe");