[英]How to use LINQ to take x rows from a multi column list
我有一個看起來像這樣的列表:
catId itemId value
1 5 "some text"
1 19 "some text"
1 21 "some text"
2 6 "some text"
2 8 "some text"
3 9 "some text"
3 82 "some text"
注意catId
列。 如何為第一個列中的每個唯一值取2行(或刪除額外的行)。 僅2行catId=1
2行用於catId=2
等?
我的列表叫做distinctXSelling
,我現在正在使用它:
foreach (var item in distinctXSelling)
{
xSelling.InnerHtml += item.value;
}
您可以按類別ID對項目進行分組,然后在將組序列展平為一系列源項目之前,從每個組中選擇前兩項。 這看起來像:
var query = source.GroupBy(item => item.catId)
.SelectMany(catGroup => catGroup.Take(2));
需要注意的是Take
方法需要高達一定數量的項目,因此,如果一個類只有一個項目,這將不會拋出。
正如BrokenGlass指出的那樣,如果您希望按特定順序輸出過濾后的項目,則可能需要.OrderBy
(可能還有.ThenBy
)。
您可能還想考慮用以下代碼替換循環:
xSelling.InnerHtml = string.Concat(query.Select(item => item.value));
如果您只是想將集合過濾到特定列,請使用Where()
var onlyCatOne = mySet.Where(x => x.catId == 1)
如果要按所有這些Group()
,請使用Group()
var groups = mySet.GroupBy(x => x.catId)
foreach(var group in groups)
{
// Do Stuff
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.