2017-01-30 69 views
2

我試圖從linq查詢返回結果,如果用戶有工作職位或者如果工作沒有任何職位。如果作業沒有指定任何位置,我無法弄清楚爲什麼它沒有返回結果。Linq查詢在ICollection爲空時返回結果。

查詢如下。

var feedQuery = from o in _context.Jobs 
       from pos in o.Positions 
       where 
       positions.Contains(pos.Id) || !o.Positions.Any() 
       select o; 

它工作正常,當工作有職位,但沒有job.Positions Icollection是空的。

有人可以告訴我我做錯了什麼嗎?先謝謝你。

回答

2

有人可以告訴我我做錯了什麼嗎?

from pos in o.Positions 

創建內作業(一個)和工作位置(零個或多個)之間的連接。其效果是,當職位很多時,它將乘以工作記錄,並將過濾不帶相關職位的工作(無論您的where子句如何)。

要使其工作,你需要刪除語句,並在許多方面(的SQL​​條款的等價物)使用基於Any標準Where

var feedQuery = 
    from o in _context.Jobs 
    where !o.Positions.Any() || o.Positions.Any(pos => positions.Contains(pos.Id)) 
    select o; 
+2

非常感謝你。我非常感謝解釋爲什麼它不起作用。教我自己編碼,這樣輸入的話非常有用。我想你現在可能已經回答了我的幾個問題。像你這樣的人似乎很樂意提供你的專業知識。 –