2010-09-27 33 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