只是想知道这是否可行。我有针对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查询中使用时无法转换这些语句。
知道这是否可行?
答案 0 :(得分:0)
使用LinqKit。它允许您在查询中使用方法,只要它们返回表达式树。
因此,在方法中根据描述要使用的属性的参数创建表达式。