如何使用 LINQ 中的外键列检索单个记录?

Posted

技术标签:

【中文标题】如何使用 LINQ 中的外键列检索单个记录?【英文标题】:How to retrieve a single record using a foreign key column in LINQ? 【发布时间】:2021-03-05 18:53:39 【问题描述】:

我有列表“StudentList”(有多个记录) 我有另一个列表“CourseList”(包含多个记录) StudentList (1) 到 (*) CourseList [关系]

我想检索 courseID(来自 CourseList 的列)= 1000 的记录;

我尝试过但无法执行的操作。

        var viewmodel = StudentList.Select(x => x.CourseList.Where(y => y.courseID == "1000"));

提前致谢!

【问题讨论】:

我假设,您的意图是获得 id 值为 1000 的单个课程,但您实际上是在将课程列表返回给 viewmodel。您可以尝试以下行并查看最终结果吗? var viewmodel = StudentList.SelectMany(x => x.CourseList.Where(y => y.courseID == "1000")).FirstOrDefault(); 谢谢你,这个就像一个魅力!请问为什么要用select many? 【参考方案1】:

这就是你要找的答案,

var viewmodel = StudentList.SelectMany(x => x.CourseList.Where(y => y.courseID == "1000")).FirstOrDefault();

由于您对它的工作原理和 selectMany 的作用表现出了兴趣,尽管我已经在 cmets 部分回答了您的问题,但我将进一步解释一下,

    首先要注意的是,x.CourseList.Where(y => y.courseID == "1000") 部分将 返回 id 为 1000 的课程列表。即使只有一门课程,也会 列表。

    如果我们为每个学生获取 id 为 1000 的课程列表,我们将 最终获得课程列表列表(使用选择时)。

    因此,这里 selectMany 将“课程列表”扁平化为“课程列表” 合并所有内部课程。

    最后,FirstOrDefault() 将确保返回 id 为的单个课程对象 100,这是您需要的结果。

注意:虽然我使用了 List 一词,但您可能正在处理 IEnumerable

希望您和其他登陆这里的人发现这对您有帮助。

【讨论】:

【参考方案2】:

你可以试试这个方法

var result = students.Where(x=>isExistCourse(x));
public static bool isExistCourse(Student student)
    
        foreach(var item in student.Courses)
        
            if(item.Id==1000)
                return true;
        
        return false;
    

如果只想获取一条记录,可以将where替换为FirstOrDefault

【讨论】:

感谢您的评论。我正在寻找单行 LINQ 查询

以上是关于如何使用 LINQ 中的外键列检索单个记录?的主要内容,如果未能解决你的问题,请参考以下文章

当主键列是mysql中不同表的外键时,如何将主键列更改为自动递增

使用 Django,如何添加引用同一个表的外键列? [复制]

子网格上的外键列使模板无效

对数据集市中的外键列使用 NULL 是不是有任何性能影响

如何通过 Laravel 中的外键检索数据?

如何使用外表中的外键获取主表列(例如:Pricena列)的总和?