Linq to sql string中的不同值。加入()

时间:2015-03-09 18:37:44

标签: c# .net linq linq-to-sql

我有一张表,其中包含课程的时间表。它包含教师名称,班级的日期时间和特定时间的课程。

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函数使用不同的值?

感谢

2 个答案:

答案 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())