我有以下数据:
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
我该怎么做?
答案 0 :(得分:7)
试试这个:
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和Months:
答案 1 :(得分:2)
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())
};
答案 2 :(得分:2)
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)) };
答案 3 :(得分:0)
GroupBy()
运算符应该可以帮助您入门