2012-05-23 80 views
0

说我有一个int列表,其中包含一个id列表。我有一个linq表,我想返回一个特定的列,但只有在linq表的ID等于int列表中的任何ID的地方。C#,lambda,linq

到目前为止,我有:

dc.tb_References.SelectMany(n => n.ID == ids).ToList(); 

在SQL我只想写:

SELECT Column_Name from Table where ID in (1,2,3,4) 

我一直在谷歌上搜索,但我无法找到我要找的。有没有人有任何提示?我想坚持使用lambda表达式。

回答

5

您可以在ID列表上使用Contains()方法。

+0

十分感谢,我一直在寻找的方法包含但我没有意识到,你可以使用它的方法在哪里里面。谢谢。 – zeencat

4

试试这个

dc.tb_References.Where(n => ids.Contains(n.ID)).ToList(); 
+0

谢谢。就是我以后的样子。 – zeencat

2

使用Where方法与Contains方法:

dc.tb_References 
    .Where(n => theListOfIds.Contains(n.ID)) 
    .Select(x => x.Column_Name) 
    .ToList(); 

,或者你可以这样做:

var query = from item in dc.tb_References 
      where theListOfIds.Contains(item.ID) 
      select item.Column_Name; 

var list = query.ToList(); 

的SelectMany是用来选择项目来来往往马子列表,然后retun所有这些ITES作为一个列表:

Fruit.Items: Apple, Pear 
Veggies.Items: Carrot, Cabbage 

List.Items: Fruit, Veggies 

List.Items.SelectMany(x => x.Items) 

结果:

Apple, Pear, Carrot, Cabbage 
0

要生成IN子句你需要调用集合中Contains方法和传递方法属性对象要搜索:产生

var ids = new int[] { 1, 3 }; 
var query = from n in dc.tb_References 
      where ids.Contains(n.ID) 
      select n; 

这里SQL(从LinqPad):

DECLARE @p0 Int = 1 
DECLARE @p1 Int = 3 

SELECT [t0].[ID], [t0].[Foo], [t0].[Bar] 
FROM [tb_References] AS [t0] 
WHERE [t0].[ID] IN (@p0, @p1) 
0

这是你之后的事情吗?

int[] myIds = {1,4,5,3}; 
List<int> list = new List<int>(); 

list.Add(1); 
list.Add(5); 
list.Add(8); 
list.Add(9); 
list.Add(10); 
list.Add(12); 


List<int> select = (from l in list where myIds.Contains(l) select l).ToList(); 
0
int ids = new int[]{1,2,3,4}; 
var list = (from d in dc.tb_References 
      where ids. Contains(d.ID) 
      select d. Column_Name).ToList();