我的列表看起来像这样:
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行(或删除额外的行)。 catId=1
的{{1}} 2行只有2行,依此类推?
我的列表名为catId=2
,我目前正在使用它:
distinctXSelling
答案 0 :(得分:4)
您可以按类别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));
答案 1 :(得分:0)
如果您只是想将该集过滤到特定列,请使用Where()
var onlyCatOne = mySet.Where(x => x.catId == 1)
如果要按所有这些分组,请使用Group()
var groups = mySet.GroupBy(x => x.catId)
foreach(var group in groups)
{
// Do Stuff
}