具有实体框架的动态谓词

时间:2010-10-14 01:46:58

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

我正在尝试通过将枚举映射到列字段来使用Entity Framework构建动态谓词:

在我输入的where子句中?因为我不知道该放在那里,我希望这是动态的,就像在本文中一样,虽然这对我来说不适用于EF; y linq to sql:

How to specify dynamic field names in a Linq where clause?

例如:

我有一个枚举:

public enum SearchTypes {

  FirstName = CustFName,
  LastName = CustLName

}

我的方法是这样的:

private static IEnumerable<CustomerSearchInfo> GetCustomers(String customerName, SearchType searchType)
    {
        using (var context = new NewgenEntities())
        {
            return context.tblCustomers.Where(??).
            Select(p => new CustomerSearchInfo
                            {
                                FirstName = p.CustFName,
                                LastName = p.CustLName,
                                Id = p.CustID,
                                EmailAddress = p.CustEmail,
                                Mobile = p.CustMNumber,
                                Phone = p.CustPNumber
                            }).ToList();
        }

有没有人有基于枚举构建表达式的方法?

1 个答案:

答案 0 :(得分:1)

使用EF查看this post使用枚举。经历了很多事情,但它确实有效。

另一种方法是创建1个属性,即enum(让我们称之为SearchType),然后创建另一个名为SearchTypeId的整数属性。 enum属性封装Id属性,如下所示:

public SearchType SearchType
{
    get
    {
        return (SearchType)this.SearchTypeId;
    }

    set
    {
        this.SearchTypeId = (int)value;
    }
}

是的,这也很难看 - 但它确实有效。

在EF的下一个版本中,它会支持枚举,但这显然不会给你太多代码。