在.NET Core(EF Core)中使用LINQ to SQL与逗号分隔的值连接,表之间没有直接关系

rhfm7lfc  于 2022-12-06  发布在  .NET
关注(0)|答案(1)|浏览(272)

我有一个表[CourseMaster] LIKE

CourseId    CourseName
-----------------------
  01          ABC
  02          DEF
  03          GHI
  04          JKL
  05          MNO
  06          PQR
  07          STU

我还有另一个表[StudentMaster]用于存储学生详细信息,例如

ROLLNO  NAME    ADDRESS       
------------------------------
12345   RAM     RAM ADDRESS                     
25695   HARI    HARI ADDRESS                   
89685   JEFF    JEFF ADDRESS              
47896   DAISY   DAISY ADDRESS

我还有另一个表[StudentCourseMaster]用于存储学生课程详细信息,例如

ROLLNO     CourseId      
-------------------
12345      01             
12345      02                 
12345      06            
25695      02
25695      06
89685      03
89685      05
89685      06
89685      07
47896      03

我正在尝试使用LINQ to SQL查询提取以下格式的记录。

ROLLNO  NAME    ADDRESS         Course
-------------------------------------------
12345   RAM     RAM ADDRESS     ABC,DEF,PQR                   
25695   HARI    HARI ADDRESS    DEF,PQR                       
89685   JEFF    JEFF ADDRESS    GHI,MNO,PQR,STU               
47896   DAISY   DAISY ADDRESS   GHI

下面是我的Linq to SQL查询

from student in _context.StudentMaster
            select new StudentDto
            {
                RollNo = student.RollNo,
                Name = student.Name,
                Address = student.Address,
                Courses = String.Join(", ", (from courseMapping in _context.StudentCourseMaster.Include(x => x.CourseMaster)
                                             where courseMapping.RollNo == student.RollNo
                                             select courseMapping.CourseMaster.CourseName)),
            }

我收到此错误

我的顾虑:
1.是否有其他方法来编写此查询?
1.如果要根据课程ID筛选学生,应如何包括课程ID?
谢谢你,任何有价值的建议将不胜感激。

rryofs0p

rryofs0p1#

只需使用导航属性:

from student in _context.StudentMasters
select new StudentDto
{
    RollNo = student.RollNo,
    Name = student.Name,
    Address = student.Address,
    Courses = string.Join(", ", student.CourseMasters.Select(x => x.CourseName))
}

相关问题