在C#中,给出如下的类定义:
public class SomeObject
{
public String A { get; set; }
public String B { get; set; }
public String C { get; set; }
}
并给出了SomeObject
的集合,我希望我的应用程序能够计算按A,B和C的任意组合分组的SomeObject的数量。是否有可用于执行此操作的LINQ查询,或者如果没有,我可以编写一些算法吗?
鉴于此:
List<SomeObject> objects;
bool GroupByA;
bool GroupByB;
bool GroupByC;
如果GroupByA为真,我想通过SomeObject.A对objects
进行分组,如果GroupByB为真,则由B进行分组,如果GroupByC为真,则由C进行分组。我知道我可以通过objects.GroupBy(o => o.A);
执行任何一个,但之后如何按B和/或C进行分组?
我希望这是有道理的。我希望得到的是这样的:
There are 10 objects with A = "Smith" and B = "London"
There are 20 objects with A = "Jones" and B = "London"
There are 44 objects with A = "Jones" and B = "Inverness"
等。等等。提前谢谢你。
答案 0 :(得分:2)
var groups = objects.GroupBy(o => new {
A = GroupByA ? o.A : null,
B = GroupByB ? o.B : null,
C = GroupByC ? o.C : null
});
foreach (var g in groups)
{
Console.WriteLine("There are {0} objects with A = {1} and B = {2} and C = {3}",
g.Count(),
g.Key.A,
g.Key.B,
g.Key.C);
}
可以使用一些更复杂的格式来处理C=null
关键部分。
答案 1 :(得分:1)
您可以使用具有两个属性的匿名类型进行分组:
objects.GroupBy(o => new { o.A, o.B });