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



只是想知道这是否可能。我有各种针对实体框架上下文的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、MetaTagFilter 3之外,它们是相同的。

与其一遍又一遍地重复这个,我想写一个方法"Filter",这样我就可以称之为:

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

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

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

知道这是否可能吗?

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

因此,在方法中创建一个基于参数的表达式,该参数描述了要使用的属性。

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

最新更新