簡體   English   中英

Linq 一個列表到 select 另一個列表中的多個項目

[英]Linq one list to select multiple items from another list

我有以下三個課程:

public class Product
{
    int id { get; set; }
    int creationDate { get; set; }
}
public class ProductList
{
    List<Product> productsList;
}

public class SelectedId
{
    List<int> selectedIds;
}

現在我有 2 個列表:

  1. selectedIds

  2. 產品

    我想從productsList中獲取每個Product ,其Id等於selectedIds中提到的Ids序列中selectedId中的值。

目前我正在做這樣的事情:

foreach (var sID in selectedId)
{
   var product = productsList.First(x => x.id == sID);
   products.Add(product);
}

請提出一個更好的方法來做同樣的事情。

可以試試 IEnumerable 擴展方法Join

var result = products.Join(selectedIds, p => p.id, i => i, (p, i) => p).ToList()

您可以使用.Where().Contains() ,如下所示:

var newList = productsList.Where(p => selectedIds.Contains(p.id)).ToList();

在純文本中,這意味着“從productsList中獲取其 id 出現在selectedIds中的所有項目”。

注意- 如果selectedIds中有重復的值,這些值將被“區分”掉,因為我們最多只返回每個 Product 一次。 如果有重復,並且您確實關心結果也會有重復的產品(+ 與所有 id 的順序相同),則使用如下形式:

var newList = selectedIds.Select(id => productsList.First(p => p.id == id)).ToList();

嘗試類似的東西

var productsList =productsList.Where((product) =>  selectedId.Any((id) => id == product.Id));

Szymon 的解決方案似乎比我的好。

有很多方法可以實現這一點,這里有一個:

var selected = productsList.Where(p => selectedIds.Contains(p.id))

您可以使用Any而不是Contains

如果要將selected的產品添加到另一個產品集合中,則可以使用anotherCollection.AddRange

可以嘗試使用聯合查詢 linq :


    var query = from id in selectedId
                       join product in productsList on id.selectedIds equals product.id
                       select new { id  = id.id , creationDate  = product.creationDate  };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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