好了,我有一個模型,看起來像這樣:LINQ篩選器列表
public int idA
public int idB
public int total
public virtual TableA TableA { get; set; }
public virtual TableB TableB { get; set; }
爲表A和B的模型是彼此相似,它們都配合這個喜歡的東西
public virtual List<Association> Assocation { get; set; }
我現在想查詢這一點,這是工作,但我希望能夠過濾結果時idB前於某整數,例如:
var results = db.TableA
.Where(t => t.idA == id)
.Where(t => t.Association.Where(m => m.idB == 1));
這將返回以下情況除外:
無法隱式轉換爲「布爾」 無法轉換lambda表達式的委託類型「System.Func」,因爲一些塊的返回類型不隱式轉換爲委託返回類型
非常感謝您的幫助!
更新
所以我已經實現了以下內容:
var results = db.TableA
.Where(t => t.idA == id)
.Where(t => t.Association.Any(m => m.idB == 1));
由於該關聯表採用的是複合主鍵應該只有1個返回結果。有大約200個結果匹配給定的t.idA == id,這就是我回來的。它不僅返回了1個結果。
只爲正在創建徹底這裏的查詢,我省略了場自己去把它簡化一些:
SELECT ... fields here ...
WHERE ([Extent1].[id] = @p__linq__0) AND (@p__linq__0 IS NOT NULL)
AND (EXISTS (SELECT ... fields here ....
WHERE ([Extent1].[id] = [Extent2].[idA]) AND (1 = [Extent2].[idB])
)
)
更新2
所以用。任何()的問題是,它會返回整個集合,如果它包含一個匹配1的值,我只想返回匹配值爲1的值。所以,因爲這個原因,我唯一能想到的就是取多餘的118行,然後過濾返回的列表。幸運的是,在分析時,這並沒有像我最初預計的那樣影響SQL服務器,所以沒有必要進行預優化。但是,如果有人確實知道如何在使用LINQ的初始SQL查詢中過濾列表,我仍然很想知道,因爲我相信我可以在將來對數據庫的影響可能更嚴重時使用它,因此優化必要的。
你的問題是什麼?錯誤信息非常清楚:'t => t.Association.Where(m => m.idB == 1)'必須返回一個布爾值,但是't.Association.Where(m => m.idB == 1 )'不是一個布爾。 – dtb