gpt4 book ai didi

c# - 另一个 LINQ OrderBy 查询

转载 作者:行者123 更新时间:2023-11-30 22:43:42 25 4
gpt4 key购买 nike

我有一个通过一系列 linq 查询重新创建的表(如数字列表)。我正在尝试根据第一行中的值按降序对列进行排序。

我的数据库是这样的:

Data
{
ColumnLabel,
RowLabel,
Value
}

{"Cat", "All", 9}
{"Dog","All", 17}
{"Fish", "All", 4}

{"Cat", "Girls", 3}
{"Dog","Girls", 2}
{"Fish", "Girls", 2}

{"Cat", "Boys", 6}
{"Dog","Boys", 15}
{"Fish", "Boys", 2}

当我天真地将这张表连接在一起时,它看起来像这样:

      Cat | Dog | Fish
All 9 17 4
Girls 3 15 2
Boys 6 2 2

我想要做的是根据 ValueColumnLabels 进行降序排序,其中 RowLabel == "All"。我希望表格看起来像这样:

      Dog | Cat | Fish
All 17 9 4
Girls 15 3 2
Boys 2 6 2

请注意 Dog 和 Cat 行翻转了。

我需要使用 HTML 输出此表,以便逐行遍历。

我首先对 ColumnLabels 进行排序:

var top = data.Where(x => x.RowLabel == "All") .OrderBy(x => x.Data) .Select(x => x.ColumnLabel).SingleOrDefault();

现在 top 包含我希望列出现的顺序; {狗、猫、鱼}。我真的不在乎行是如何垂直排序的。

然后我想做的是根据它的 RowLabel 值对每一行进行分组:

var row = data.GroupBy(x => x.RowLabel)
.OrderBy(y => ??????????????);
//I want to OrderBy the values in top
//How do I do this?

然后我遍历每一行并创建我的 HTML 表格。这部分很简单,但我不知道如何根据最高顺序对后续行进行排序。我如何在 LINQ 中执行此操作?

最佳答案

我相信这会做你想做的事:

var order = data
.Where(x => x.RowLabel == "All")
.OrderByDescending(x => x.Value)
.Select((x, i) => new { x, i })
.ToDictionary(x => x.x.ColumnLabel, x => x.i);
var result = data
.GroupBy(x => x.RowLabel, (x, y) => y.OrderBy(z => order[z.ColumnLabel]));

foreach (var x in result)
{
foreach (var y in x)
{
Console.WriteLine("ColumnLabel: {0}, RowLabel: {1}, Value: {2}", y.ColumnLabel, y.RowLabel, y.Value);
}
}

结果:

ColumnLabel: Dog, RowLabel: All, Value: 17 
ColumnLabel: Cat, RowLabel: All, Value: 9
ColumnLabel: Fish, RowLabel: All, Value: 4
ColumnLabel: Dog, RowLabel: Girls, Value: 2
ColumnLabel: Cat, RowLabel: Girls, Value: 3
ColumnLabel: Fish, RowLabel: Girls, Value: 2
ColumnLabel: Dog, RowLabel: Boys, Value: 15
ColumnLabel: Cat, RowLabel: Boys, Value: 6
ColumnLabel: Fish, RowLabel: Boys, Value: 2

如果我误解了您的问题请告诉我,但这里的想法是创建一个字典 order 为后续分组查询提供排序。另一个关键思想是使用 group-by 的 resultSelector 对其中的元素进行排序(因为它们代表列)。

关于c# - 另一个 LINQ OrderBy 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3818734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com