如何在linq to sql查询中使用linq实体查询或列表

时间:2013-05-29 17:40:34

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

我有一个通用的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并且不允许这样做。但我不知道如何避免或克服它。

请帮助找出解决方案。

1 个答案:

答案 0 :(得分:1)

关于部分

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

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

bodyTypesFilterIds.Contains(v.BodyType.Id)

(或可能是v.BodyTypeId

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

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