簡體   English   中英

C#,lambda,linq

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM