Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用可能的多个group by子句在C#中创建动态LINQ查询?_C#_.net_Linq_Group By_Linq To Objects - Fatal编程技术网

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

如何使用可能的多个group by子句在C#中创建动态LINQ查询?,c#,.net,linq,group-by,linq-to-objects,C#,.net,Linq,Group By,Linq To Objects,我已经做了几年的程序员了,但我是一名 LINQ和C的新成员,如果我的问题听起来像 特别愚蠢 我希望有人能给我指出正确的方向 方向。我的任务是想出形成一个 使用 作为源的通用列表 例如,假设我有一个包含以下内容的多个项目的列表 结构: FieldChar1 - character FieldChar2 - character FieldChar3 - character FieldNum1 - numeric FieldNum2 - numeric 简而言之,我希望能够创建一个LINQ查询 将F

我已经做了几年的程序员了,但我是一名
LINQ和C的新成员,如果我的问题听起来像
特别愚蠢

我希望有人能给我指出正确的方向
方向。我的任务是想出形成一个 使用
作为源的通用列表

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

FieldChar1 - character
FieldChar2 - character
FieldChar3 - character
FieldNum1 - numeric
FieldNum2 - numeric
简而言之,我希望能够创建一个LINQ查询
将FieldNum1和FieldNum2之和按任意一个、两个或
将在
运行时,这取决于用户要求以及在同一查询中选择FieldChar字段

我的项目中有dynamic.cs,它包含一个GroupByMany扩展方法,但我必须承认,我真的不知道如何使用这些方法。如果使用带有硬连线group by请求的查询,而不是动态查询,则可以获得所需的结果

对于任何错误的命名,我深表歉意,我对这种语言还不熟悉,但任何建议都是非常受欢迎的

非常感谢


Alex

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

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

    public int Age { get; set; }

    public char Sex { get; set; }
}
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);
}
然后,您可以像这样使用
GroupBy

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

    public int Age { get; set; }

    public char Sex { get; set; }
}
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);
}
请注意,您可能正在寻找使用多个
OrderBy
s:

var query = people.OrderBy(p => p.Age).ThenBy(p => p.Sex);
//You can have unlimited ThenBy's
还请注意,上一个GroupBy语句的结果与此OrderBy语句的结果不相同。

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

因此,您可以传入groupByName和groupByDirection,当您通过时,您可能会看到如下内容

GroupBy(“lastName desc”,新{})


GroupBy(“firstName asc”,new{})

非常感谢您的回复。我真的很感激,给了我一些新的东西。但是有没有可能得到你的例子。。。var groups=people.GroupBy(p=>new{p.Age,p.Sex});将group by子句(p.Age,p.Sex)替换为预先建立的变量字符串,该字符串可以是年龄和/或性别的任意组合?我来自FoxPro/SQL的背景,在这里,您可以使用字符串连接动态构建查询。再次感谢您的帮助-使用LINQ,您不能仅仅连接字符串,因为LINQ需要强类型。通过动态创建这样一个表达式,可以实现类似的效果。啊哈。因此,在您的示例中,如果用户希望有时按性别和年龄分组,有时仅按年龄分组,那么在不实际硬编码GROUPBY子句的情况下,您将如何进行分组?我再次道歉,这对我来说都是新鲜事。再次感谢。