我有一个通用的EF存储库,需要使用嵌套的where语句从数据库中获取项目。
var categoryGroups = repository.Categories.Where(a => a.Vehicles.Where(v =>
bodyTypesFilter.Any(b => b == v.BodyType)).Count() > 0);
我只包含lambda表达式的重要部分。 这里bodyTypesFilter是一个List,我得到了以下异常。
无法创建类型为'System.Collections.Generic.List`1'的空常量值。在此上下文中仅支持实体类型,枚举类型或基元类型。
据我所知,这是因为我正在尝试生成linq to sql查询,其中包含List并且不允许这样做。但我不知道如何避免或克服它。
请帮助找出解决方案。
答案 0 :(得分:1)
关于部分
bodyTypesFilter.Any(b => b == v.BodyType)
您无法比较EF查询中的对象,因为部分bodyTypesFilter
无法转换为SQL。这样做:
bodyTypesFilterIds.Contains(v.BodyType.Id)
(或可能是v.BodyTypeId
)
其中bodyTypesFilterIds
是Id值的列表,而不是对象。
(不是Any
,因为这会产生一个怪物查询,很容易发展成一个太深的嵌套级别。)