[英]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 個列表:
selectedIds
產品
我想從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.