首页 > 解决方案 > LINQ DB 列表包含对象

问题描述

我正在尝试编写一个 linq 查询,但它不起作用。我的数据库由一个 EventDetails 表组成,我从中获取学生,然后我想为每个学生获取班级(n:1)。所以我迭代班级表并检查学生列表是否包含学生。我究竟做错了什么?

编码:

var students = db.EventDetails
    .Include("Room")
    .Include("Task")
    .Include("Student")
    .Where(x => x.Student != null)
    .Select(x => x);

foreach (var s in students)
{
    string studentClass = db.Class
    .Include("Students")
    .ToList()
    .Where(x => x.Students.Contains(s.Student))
    .Select(x => x.Name).ToString();
}

标签: c#linq

解决方案


您收到了显示的输出,因为您调用ToString()的是IEnumerable<string>代替,用于String.Join获得预期的结果,即

 string studentClass = string.Join(", ",db.Class
        .Include("Students")       
        .Where(x => x.Students.Contains(s.Student))
        .Select(x => x.Name));

此外,.ToList()在查询中间调用是不必要的,并且会导致可避免的开销,因此最好不要在那里调用它。


推荐阅读