For*_*141 6 .net c# linq linq-to-objects group-by
我已经成为程序员多年了,但我是
LINQ和C#的新手,所以请原谅我,如果我的问题听起来
特别愚蠢.
我希望有人能够指出我正确的
方向.我的任务是
使用
通用列表作为源,在ac#脚本中通过linq查询形成动态多组的能力.
例如,假设我有一个包含多个项目的列表,其
结构如下:
FieldChar1 - character
FieldChar2 - character
FieldChar3 - character
FieldNum1 - numeric
FieldNum2 - numeric
Run Code Online (Sandbox Code Playgroud)
简而言之,我希望能够创建一个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; }
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
至于按多个属性分组,请参阅: http:
//weblogs.asp.net/zeeshanhirani/archive/2008/05/07/group-by-multiple-columns-in-linq-to-sql.aspx
LINQ TO DataSet :数据表上的多个group by
基本上,它与匿名类型的语法相同,例如:
var groups = people.GroupBy(p => new { p.Age, p.Sex });
Run Code Online (Sandbox Code Playgroud)
请注意,您可能正在寻找使用多个OrderBys:
var query = people.OrderBy(p => p.Age).ThenBy(p => p.Sex);
//You can have unlimited ThenBy's
Run Code Online (Sandbox Code Playgroud)
另请注意,最后一个 GroupBy 语句的结果和此 OrderBy 语句的结果不相同。