0

我有一个通用的 EF 存储库,需要使用嵌套的 where 语句从数据库中获取项目。

var categoryGroups = repository.Categories.Where(a => a.Vehicles.Where(v => 
                   bodyTypesFilter.Any(b => b == v.BodyType)).Count() > 0);

我只包括了 lambda 表达式的重要部分。这里 bodyTypesFilter 是一个列表,我得到以下异常。

无法创建类型为“System.Collections.Generic.List`1”的空常量值。此上下文仅支持实体类型、枚举类型或原始类型。

我知道这是因为我正在尝试生成包含 List 的 linq to sql 查询,但这是不允许的。但我不知道如何避免或克服它。

请帮助找出解决方案。

4

1 回答 1

1

这是关于部分

bodyTypesFilter.Any(b => b == v.BodyType)

您无法比较 EF 查询中的对象,因为该部分bodyTypesFilter无法转换为 SQL。改为这样做:

bodyTypesFilterIds.Contains(v.BodyType.Id)

(或可能v.BodyTypeId

其中bodyTypesFilterIds是 Id 值列表而不是对象。

(不是Any,因为这会创建一个很容易发展成太深嵌套级别的怪物查询)。

于 2013-05-29T21:55:53.130 回答