C# 具有实体框架的动态谓词
我正在尝试通过将枚举映射到列字段来使用实体框架构建动态谓词: 我在where子句中输入了??因为我不知道该放什么,我希望这是动态的,就像在本文中一样,尽管这在EF中不起作用;y linq到sql: 例如: 我有一个枚举:C# 具有实体框架的动态谓词,c#,entity-framework,dynamic,linq-to-entities,C#,Entity Framework,Dynamic,Linq To Entities,我正在尝试通过将枚举映射到列字段来使用实体框架构建动态谓词: 我在where子句中输入了??因为我不知道该放什么,我希望这是动态的,就像在本文中一样,尽管这在EF中不起作用;y linq到sql: 例如: 我有一个枚举: public enum SearchTypes { FirstName = CustFName, LastName = CustLName } 我的方法如下: private static IEnumerable<CustomerSearchInfo>
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();
}
私有静态IEnumerable GetCustomers(字符串customerName,SearchType SearchType)
{
使用(var context=newnewGenetities())
{
返回context.tblCustomers.Where(??)。
选择(p=>newcustomersearchinfo
{
FirstName=p.CustFName,
LastName=p.CustLName,
Id=p.CustID,
EmailAddress=p.CustEmail,
Mobile=p.CustMNumber,
电话号码=p.CustPNumber
}).ToList();
}
有人有基于枚举构建表达式的方法吗?请查看如何将枚举与EF一起使用。虽然要经历很多,但它是有效的
另一种方法是创建一个枚举属性(我们称之为SearchType),然后创建另一个名为SearchTypeId的整数属性。枚举属性封装Id属性,如下所示:
public SearchType SearchType
{
get
{
return (SearchType)this.SearchTypeId;
}
set
{
this.SearchTypeId = (int)value;
}
}
是的,这也很难看——但它确实有效
在EF的下一个版本中,它将支持枚举,但这显然不会给您带来太多的代码。查看如何使用表达式构建动态linq查询。