[英]C#, lambda, linq
假设我有一个包含ID列表的int列表。 我有一个linq表,并且我想返回一个特定的列,但是只返回linq表的ID等于int列表中的任何ID的列。
到目前为止,我有:
dc.tb_References.SelectMany(n => n.ID == ids).ToList();
在SQL中,我只会写:
SELECT Column_Name from Table where ID in (1,2,3,4)
我一直在搜寻,但是找不到我想要的东西。 有人有提示吗? 我想坚持使用lambda表达式。
您可以在ID列表上使用Contains()方法。
dc.tb_References.Where(item => ids.Contains(item.ID)).ToList();
尝试这个
dc.tb_References.Where(n => ids.Contains(n.ID)).ToList();
将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用于从子列表中选择项目,然后将所有这些ites调整为列表:
Fruit.Items: Apple, Pear
Veggies.Items: Carrot, Cabbage
List.Items: Fruit, Veggies
List.Items.SelectMany(x => x.Items)
结果:
Apple, Pear, Carrot, Cabbage
要生成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)
这是您所追求的吗?
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();
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.