我有一张表,其中包含课程的时间表。它包含教师名称,班级的日期时间和特定时间的课程。
teacherid teachername startdate coursename
1 john 9/1/2014 10:00 math
2 john 9/2/2014 10:00 math
3 jane 9/3/2014 10:00 english
4 john 9/4/2014 10:00 french
5 jack 9/5/2014 10:00 history
6 jane 9/6/2014 10:00 math
我想写一个linq到sql查询,它返回哪个老师提供哪些课程,如下:
Teachername courses
john math, french
jane english, math
jack history
我已经达到了以下
var _classes = from _c in dbContext.classes
where _c.StartDate < System.DateTime.Now
group _c by new
{
_c.TeacherId,
_c.TeacherName,
_c.CourseName
} into g
select new
{
g.Key.TeacherName,
courses = string.Join(",", from i in g select i.CourseName)
};
但我得到以下输出
Teachername courses
john math, math, french
jane english, math
jack history
所以john两次获得数学值。 如何使string.Join函数使用不同的值?
感谢
答案 0 :(得分:2)
distinct
没有查询语法,因此您应该更改为方法语法:
courses = string.Join(",", g.Select(i => i.CourseName).Distinct())
答案 1 :(得分:0)
将Distinct
添加到String.Join
中的select子句中,如:
courses = string.Join(",", (from i in g select i.CourseName).Distinct())
或者使用方法语法进行选择,如:
courses = string.Join(",", (g.Select(i=> i.CourseName).Distinct())