2013-05-29 124 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,因爲這會創建一個怪物查詢,很容易發展到太深的嵌套級別)。