【问题标题】:Convert Sql Query to expression in LINQ [closed]将 Sql 查询转换为 LINQ 中的表达式 [关闭]
【发布时间】:2021-10-13 02:17:57
【问题描述】:

两个表处理学生记录:Students_Subjects 和 Students_Tests。这些表是 m 到 n 的关系。通过下面的 sql,我们列出了参加考试的科目 44 的学生。 (诚​​然,有更简单的方法可以获得相同的结果)。

这是我要转换的 SQL 查询

SELECT *
FROM Students_Subjects AS s 
LEFT OUTER JOIN Students_Tests AS r
    ON s.Stud_National_Id = r.Stud_National_Id 
    AND s.Subject_Id = r.Subject_Id
WHERE s.Subject_Id = 44

我们如何使用 Linq 表达式做到这一点?

【问题讨论】:

  • 欢迎来到 Stack Overflow。您能否用 SQL 表定义补充您的问题。此外,您的代码究竟在哪里遇到问题?你用的是ORM,比如Entity Framework?
  • 是的,我使用实体框架
  • 尝试使用查询方法但不起作用
  • SQL 无法转换为 LINQ。充其量,您可以编写转换为返回相同结果的 SQL 的 LINQ。为了能够帮助您,我们需要了解 C# 类模型以及它是如何映射到数据库模型的。另外,请说明您在尝试实现此目标时遇到的具体问题。 (像“不工作”这样的描述没有多大意义)。
  • @GertArnold 和我想问的是你扩展你的问题,所以它是一个minimal reproducible example。这样,我们就能确切地知道您的问题是什么以及如何帮助您。

标签: sql linq methods expression entity


【解决方案1】:

注意,我必须更改列的名称。 当在多个列上连接 2 个表时,所连接的列必须具有相同的名称。

    void Main()
    {
        Students_Subjects.Add(new Student_Subject() { Subject_ID = 44, Stud_National_ID = 157 });
        Students_Tests.Add(new Student_Test() { Subject_ID = 44, Stud_National_ID = 157 });
    
        var q = Students_Subjects
            .Join(Students_Tests,s => new{s.Stud_National_ID,s.Subject_ID},r=>new {r.Stud_National_ID,r.Subject_ID},(s,r) => new {s.Stud_National_ID,s.Subject_ID})
            .Where(s => s.Subject_ID == 44);
    }
    class Student_Subject
    {
        public int Subject_ID {get;set;}
        public int Stud_National_ID { get; set; }
    }
    List<Student_Subject> Students_Subjects = new List<Student_Subject>();
    class Student_Test
    {
        public int Subject_ID { get; set; }
        public int Stud_National_ID { get; set; }
    }
    List<Student_Test> Students_Tests = new List<Student_Test>();

【讨论】:

  • 这个想法是,来自 SQL 背景的人不应该在 LINQ 中自动求助于join。通常可以创建具有关联(引用和/或集合)的类模型,并且不需要连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多