如何使用LINQ从多列列表中获取x行

时间:2011-04-18 17:19:46

标签: c# linq

我的列表看起来像这样:

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

2 个答案:

答案 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
}