如何在C#中创建具有多个group by子句的动态LINQ查询?

时间:2010-05-24 18:13:13

标签: c# .net linq group-by linq-to-objects

我已经成为一名程序员多年了,但我是一名士 LINQ和C#的新人如果我的问题听起来那么请原谅我 特别愚蠢。

我希望有人可以指出我的权利 方向。我的任务是提出形成的能力 使用
在c#脚本中通过linq查询动态多组 通用列表作为源。

例如,假设我有一个包含多个项目的列表,其中包含以下内容 结构:

FieldChar1 - character
FieldChar2 - character
FieldChar3 - character
FieldNum1 - numeric
FieldNum2 - numeric

简而言之,我希望能够创建一个LINQ查询 将FieldNum1和FieldNum2的任何一个,两个或
分组 将在3-1决定的所有三个FieldChar字段 运行时取决于用户要求以及在同一查询中选择FieldChar字段。

我的项目中有dynamic.cs,它包含了GroupByMany扩展方法,但我不得不承认我真的不确定如何使用它们。如果我通过请求使用硬连线组而不是动态查询,我能够获得所需的结果。

对于任何错误的命名法道歉,我是这种语言的新手,但任何建议都是最受欢迎的。

非常感谢

亚历

2 个答案:

答案 0 :(得分:1)

这是基本的GroupBy示例。假设我们有一个像这样的简单类:

public class Person
{
    public string Name { get; set; }

    public int Age { get; set; }

    public char Sex { get; set; }
}

然后,您可以像这样使用GroupBy

var people = new List<Person> {
    new Person { Name = "Joe", Age = 30, Sex = 'M' },
    new Person { Name = "Liz", Age = 22, Sex = 'F' },
    new Person { Name = "Jim", Age = 22, Sex = 'M' },
    new Person { Name = "Alice", Age = 30, Sex = 'F' },
    new Person { Name = "Jenny", Age = 22, Sex = 'F' }
};
var groups = people.GroupBy(p => p.Age);

foreach (var group in groups)
{
    foreach (var person in group)
        Console.WriteLine(person.Name + " - " + person.Age);
}

至于多个属性的分组,请参阅:
http://weblogs.asp.net/zeeshanhirani/archive/2008/05/07/group-by-multiple-columns-in-linq-to-sql.aspx
LINQ TO DataSet: Multiple group by on a data table

基本上,它与匿名类型的语法相同,例如:

var groups = people.GroupBy(p => new { p.Age, p.Sex });

请注意,您可能正在寻找使用多个OrderBy s:

var query = people.OrderBy(p => p.Age).ThenBy(p => p.Sex);
//You can have unlimited ThenBy's

另请注意,最后一个GroupBy语句的结果和此OrderBy语句的结果不一样。

答案 1 :(得分:0)

GroupBy(groupByName +“”+ groupByDirection,new {})

所以你可以传入groupByName和groupByDirection,当你单步执行时,你可能会看到类似

的内容

GroupBy(“lastName desc”,new {})

GroupBy(“firstName asc”,new {})