IDictionary错误:LINQ to Entities无法识别方法'Boolean get_Item(System.String)'方法,

时间:2012-09-05 16:24:27

标签: entity-framework-4 lambda linq-to-entities

我的WCF实体框架代码中有这行代码

if (criteria.AccommodationTypes != null && criteria.AccommodationTypes.Count > 0)
   result = result.Where(a => criteria.AccommodationTypes[a.Type]);

执行时会导致此错误

LINQ to Entities does not recognize the method 'Boolean get_Item(System.String)' method, and this method cannot be translated into a store expression.

AccommodationTypes是一个IDictionary。我可以看到问题是EF无法将我的代码转换为SQL,这就是为什么它失败但我无法看到我需要编写什么查询来执行此功能。

谢谢,

萨钦

1 个答案:

答案 0 :(得分:0)

对于将来遇到类似问题的人来说,我就是这样解决的。我创建了一个列表,列出了我感兴趣的字典中的所有值(对应的布尔值为true),然后在该列表的查询中执行了包含。

var types = (from type in criteria.AccommodationTypes where type.Value select type.Key).ToList();

if (criteria.AccommodationTypes != null && criteria.AccommodationTypes.Count > 0)
  result = result.Where(a => types.Contains(a.Type));