Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在LINQ中使用外键列检索单个记录?_C#_Sql_Entity Framework_Linq_Linq To Sql - Fatal编程技术网

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

C# 如何在LINQ中使用外键列检索单个记录?,c#,sql,entity-framework,linq,linq-to-sql,C#,Sql,Entity Framework,Linq,Linq To Sql,我有“学生名单”(有多个记录) 我还有一个“课程列表”(包含多个记录) 学生名单(1)至(*)课程名单[关系] 我想检索courseID(CourseList中的列)=1000的记录 我尝试过但无法执行的内容 var viewmodel = StudentList.Select(x => x.CourseList.Where(y => y.courseID == "1000")); 提前谢谢 你可以试试这个方法 var result = stud

我有“学生名单”(有多个记录) 我还有一个“课程列表”(包含多个记录) 学生名单(1)至(*)课程名单[关系]

我想检索courseID(CourseList中的列)=1000的记录

我尝试过但无法执行的内容

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

提前谢谢

你可以试试这个方法

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

您可以尝试此方法

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
替换为
first或default
以下是您想要的答案

var viewmodel = StudentList.SelectMany(x => x.CourseList.Where(y => y.courseID == "1000")).FirstOrDefault();
由于您对它的工作方式以及selectMany的功能表现出了兴趣,尽管我已经在评论部分回答了您的问题,但我还是想进一步解释一下

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

  • 如果我们得到每个学生id为1000的课程列表,我们将 最终获得课程列表(使用select时)

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

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

  • 注意:虽然我使用了术语列表,但您可能正在处理IEnumerable


    希望你和任何登陆这里的人都觉得这很有帮助。

    这是你一直在寻找的答案

    var viewmodel = StudentList.SelectMany(x => x.CourseList.Where(y => y.courseID == "1000")).FirstOrDefault();
    
    由于您对它的工作方式以及selectMany的功能表现出了兴趣,尽管我已经在评论部分回答了您的问题,但我还是想进一步解释一下

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

  • 如果我们得到每个学生id为1000的课程列表,我们将 最终获得课程列表(使用select时)

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

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

  • 注意:虽然我使用了术语列表,但您可能正在处理IEnumerable


    希望您和任何登陆这里的人都会觉得这很有帮助。

    我想,您的目的是获取id值为1000的单个课程,但实际上您正在将课程列表返回到viewmodel。你能试着按照这句话来做,看看最终的结果吗?var viewmodel=StudentList.SelectMany(x=>x.CourseList.Where(y=>y.courseID==“1000”).FirstOrDefault();谢谢你,这个很有魅力!我想问一下为什么要使用selectmany?我想,您的目的是获得id值为1000的单个课程,但实际上是将课程列表返回给viewmodel。你能试着按照这句话来做,看看最终的结果吗?var viewmodel=StudentList.SelectMany(x=>x.CourseList.Where(y=>y.courseID==“1000”).FirstOrDefault();谢谢你,这个很有魅力!请问为什么使用select many?谢谢您的评论。我正在寻找一行LINQ查询谢谢你的评论。我正在寻找一行LINQ查询