按名称访问LINQ WHERE语句中的属性

时间:2015-04-29 14:29:54

标签: c# linq entity-framework

只是想知道这是否可行。我有针对Entity Framework上下文的各种LINQ查询,例如:

 IQueryable<MetaData> metaDataList = context.MetaData.AsQueryable();
 metaDataList = metaDataList.Where(md => md.MetaTagFilter1.Equals(keyValueMetaTagFilter.MetaTagValue, StringComparison.InvariantCultureIgnoreCase));
 metaDataList = metaDataList.Where(md => md.MetaTagFilter2.Equals(keyValueMetaTagFilter.MetaTagValue, StringComparison.InvariantCultureIgnoreCase));
 metaDataList = metaDataList.Where(md => md.MetaTagFilter3.Equals(keyValueMetaTagFilter.MetaTagValue, StringComparison.InvariantCultureIgnoreCase));

如您所见,除了正在使用的属性外,它们是相同的:MetaTagFilter1,MetaTagFilter2,MetaTagFilter3。

我不想一遍又一遍地重复这个,而是想写一个方法'Filter',这样我就可以这样称呼它:

metaDataList = metaDataList.Filter("MetaTagFilter1");  
metaDataList = metaDataList.Filter("MetaTagFilter2"); 
metaDataList = metaDataList.Filter("MetaTagFilter3"); 

因此,属性名称作为字符串传递,然后应在LINQ查询中使用此属性。

我尝试将属性作为Func和反射传递,但LINQ to实体在LINQ查询中使用时无法转换这些语句。

知道这是否可行?

1 个答案:

答案 0 :(得分:0)

使用LinqKit。它允许您在查询中使用方法,只要它们返回表达式树。

因此,在方法中根据描述要使用的属性的参数创建表达式。

请参阅http://www.albahari.com/nutshell/linqkit.aspx