1

我目前有一种情况,我正在使用 Linq to Entities 执行搜索。

如果我想通过客户的参考代码进行搜索,我将使用这种方法: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")
4

1 回答 1

3

我假设你的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");
于 2013-04-10T11:55:07.650 回答