只是想知道这是否可能。我有各种针对实体框架上下文的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