2013-05-29 75 views
0

我有一个通用的EF存储库,需要使用嵌套的where语句从数据库中获取项目。如何使用LINQ实体查询或LINQ到SQL查询列表

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'类型的空常量值。在此上下文中仅支持实体类型,枚举类型或基本类型。

我知道这是由于我试图生成LINQ到SQL查询,其中包括列表,它是不允许的。但我不知道如何避免或克服。

请帮忙找出解决方案。

+0

是'bodyTypesFilter' null的任何元素? –

+0

解释你想得到什么结果。 –

+0

是@Ben在抛出异常时为空 – Gohar

回答

1

这是关于部分

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

你不能比较EF查询的对象,这是因为部分bodyTypesFilter不能转换成SQL。在代替做到这一点:

bodyTypesFilterIds.Contains(v.BodyType.Id) 

(或可能v.BodyTypeId

其中bodyTypesFilterIds是ID值的对象代替列表。

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