c# - 如何在 C# 中使用可能的多个 group by 子句创建动态 LINQ 查询?

标签 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 按任何一个、两个或
分组 将在
处确定的所有三个 FieldChar 字段 运行时取决于用户要求以及在同一查询中选择 FieldChar 字段。

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

对于任何错误的命名法,我深表歉意,我是这门语言的新手,但非常欢迎任何建议。

非常感谢

亚历克斯

最佳答案

这是基本的 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 的方法:

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

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

关于c# - 如何在 C# 中使用可能的多个 group by 子句创建动态 LINQ 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2899183/

相关文章:

c# - .Where Lambda 表达式加载整个表

c# - 如何检测我的应用程序在 C# 中处于空闲状态?

c# - 将 TSQL 转换为 Linq to Entities

c# - 兼容 php、java 和 c# 的图像编码/解码方式

c# - 私有(private)成员实例化/初始化的最佳实践是什么?

c# - 优化 foreach 循环

c# - 依赖于访问修改后的闭包的实现是否不可取?

c# - 如何阻止 bindingSource/ComboBox 更改选择

c# - Newtonsoft DeserializeXNode 错误地扩展了内部数组

c# - 更改 WebResource.axd URL