【问题标题】:Accessing a property in a LINQ WHERE statement by name按名称访问 LINQ WHERE 语句中的属性
【发布时间】:2015-04-29 14:29:54
【问题描述】:

只是想知道这是否可能。我有针对实体框架上下文的各种 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 查询中使用,LINQ to entity 无法转换这些语句。

知道这是否可能吗?

【问题讨论】:

标签: c# linq entity-framework


【解决方案1】:

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

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

http://www.albahari.com/nutshell/linqkit.aspx

【讨论】:

    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2017-12-20
    • 2011-06-11
    相关资源
    最近更新 更多