,我有以下數據:集團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
我做的怎麼辦這個?
,我有以下數據:集團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和月新的匿名類型:
非常感謝這個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