2010-09-27 31 views
6

我試圖做一個LINQ to SQL語句篩選結果,其中ID是而不是在一些整數列表中。我知道()方法不能Linq中用於SQL,但解釋的目的。載我想做些什麼,這是我想做什麼:LINQ to SQL其中ID不在some_list

nextInvention = (from inv in iContext.Inventions 
        where !historyList.Contains(inv.Id) 
        orderby inv.DateSubmitted ascending 
        select inv).First<Invention>(); 

任何想法,我怎麼可能去做這個?

謝謝!

回答

16

Contains可以用於LINQ to SQL ...這是執行「IN」查詢的常規方式。我有一個模糊的回憶,有一些限制,但它絕對可以工作。限制可能在所涉及的類型...是historyList a List<T>?例如,它可能不支持任意IEnumerable<T>

現在,我不知道反轉結果是否可以給出「NOT IN」查詢,但至少值得一試。你是否嘗試過你的問題的確切查詢?

要注意的一點:我認爲,如果你試圖讓一個條款,每行查詢的可讀性會改善:

var nextInvention = (from inv in iContext.Inventions 
        where !historyList.Contains(inv.Id) 
        orderby inv.DateSubmitted ascending 
        select inv) 
        .First(); 

還要注意的是,在這種情況下,該方法的語法可以說是簡單的:

var nextInvention = iContext.Inventions 
          .Where(inv => !historyList.Contains(inv.Id)) 
          .OrderBy(inv => inv.DateSubmitted) 
          .First(); 
+0

謝謝隊友!完美的作品。另外,我確實每行有一個子句,我的天真是在stackoverflow的標記^ _ ^我沒有正確包圍代碼。無論如何,乾杯:) – basicallydan 2010-09-27 14:01:31