如何使用可能的多个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子句的情况下,您将如何进行分组?我再次道歉,这对我来说都是新鲜事。再次感谢。