集团LINQ
问题描述:
,我有以下数据:集团LINQ
CourseID Month 100 Jan 100 Feb 101 Jan 102 May 102 Jun 102 July
我想编写一个LINQ查询返回的数据如下(包括引号):
CourseID Months 100 Jan, Feb 101 Jan 102 May, Jun, July
我做的怎么办这个?
答
试试这个:
courses.GroupBy(c => c.CourseID)
.Select(g => new
{
Id = g.Key,
Months = String.Join(", ", g.Select(c => c.Month).ToArray())
});
如果你使用.NET 4.0,你不需要ToArray的调用,因为的string.join有一个新的重载采取IEnumerable。
解释它是如何工作:
首先,组组由CourseID课程。这将返回IEnumerable<IGrouping<int, Course>>
- 枚举中的每个元素都包含一个名为Key的属性 - 这是所有分组到它的课程的CourseID。
这一点是关键:IGrouping也是一个IEnumerable<Course>
- 这意味着它可以通过返回在Key中保存的ID下分组的每个元素进行迭代。
所有的最后部分也就是选择有两个属性,Id和月新的匿名类型:
- ID设置为密钥(CourseID)
- 月设定为加入的结果在一起分组课程的所有月份值。这是通过使用String.Join完成的,因为它可以轻松地为值指定分隔符。
+0
非常感谢这个String.Join – VeecoTech 2011-06-11 23:39:51
答
的GroupBy()
经营者应帮助您开始
答
var q =
from course in courses
group course by course.CourseID into courseGroup
select new
{
CourseId = courseGroup.Key,
Months = string.Join(", ", (
from c in courseGroup
select c.Month).ToArray())
};
答
LINQ查询相当简单:
var courses = new List<Course>
{
new Course(){ CourseId = 100, Month = "JAN"},
new Course(){ CourseId = 100, Month = "FEB"},
new Course(){ CourseId = 101, Month = "JAN"},
};
var q = from course in courses group course by course.CourseId into grouping select new { CourseId = grouping.Key, Months = string.Join(", ", grouping.Select(value => value.Month)) };
你看看'GroupBy','Aggregate'和'Select'? – bzlm 2011-06-11 15:14:00