我有一个看起来像这样的列表:
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
只有 2 行 catId=2
有 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));
关于c# - 如何使用 LINQ 从多列列表中获取 x 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5706474/