我有这个问题,我目前被困在c#。我在Jarray (Jarray tableJson = new Jarray ();) Jobject内大约有31列数据
我想把它们分成三列。到目前为止,我只能按其中一列分组如:
var tableJsonGroup = tableJson.GroupBy(x => x["FirstColumn"]).ToList();
我想做这样的事情(它不工作):
var tableJsonGroup = tableJson.GroupBy(x => new {x["FirstColumn"], x["SecondColumn"], x["FifthColumn"]}).ToList();
我该怎么做?
谢谢。
正如我们所看到的,GroupBy扩展的这个重载接受一个委托,该委托用于枚举tableJson
并为每个项生成一个键。
生成相同密钥的项将被分组在一起并作为igrougroup返回。没有基于源类型的特殊处理。无论您使用的是int
数组还是复杂对象数组,这都没有什么不同。
因此,如果您希望按列组合进行分组,则需要提供一个函数,该函数为该列组合返回唯一的、可重复的键。
这可以简单地通过将这些列组合成一个匿名类型来实现,该类型具有适合我们目的的内建的相等和哈希实现,就像这个答案一样。
var groupedTableJson = tableJson.GroupBy(x =>
new {
FirstColumn: x["FirstColumn"],
SecondColumn: x["SecondColumn"],
FifthColumn: x["FifthColumn"]
});
你的答案几乎是正确的,但是,你没有为你的匿名类型的属性提供名称。然而,由于你没有解释什么"不起作用",所以很难确定。