Linq左外连接两个字段上的两个表

时间:2018-03-01 05:18:54

标签: linq

如何在linq中的两个字段上保留外连接两个表? 我有一个sql:

    select a.*, b.* from courselist as a
                                 left outer join  Summary as b
                                 on a.subject = b.Subject and a.catalog = 
    b.Catalogno 
                                 where a.degree_id = 1 
                                 order by a.sequenceNo

下面是我的linq查询,但是有错误下划线"加入",在" Groupjoin"的调用中失败。我不知道如何纠正这一点。

    var searchResults = (from a in db.courselist
                                   join b in db.Summary on
                                  new { a.subject,a.catalog } equals
                                   new { b.Subject, b.Catalogno } into ab

                                  where  a.degree_id == 1 
                                  orderby a.degree_sequenceNo
                                  from b  in ab.DefaultIfEmpty()
                                  select new
                                  {
                                      Courselist = a,
                                      Summary = b
                                  }
                                ).ToList();

感谢。

3 个答案:

答案 0 :(得分:0)

似乎您缺少引用,查询没有错误 试着用这个:

using System.Linq;

答案 1 :(得分:0)

人们开始使用LINQ时的主要问题是他们一直在思考SQL方式,他们首先设计SQL查询然后将其转换为LINQ。您需要学习如何以LINQ方式思考,并且您的LINQ查询将变得更整洁和简单。例如,在LINQ中,您不需要连接。您应该使用关联/导航属性。查看this post了解详情。

courselistSummary之间应该存在关联,在这种情况下,您可以通过Summary访问courselist,如下所示:

var searchResults = (from a in db.courselist
                     where  a.degree_id == 1 
                     orderby a.degree_sequenceNo
                     select new {
                         Courselist = a,
                         Summary = a.Summary
                     }).ToList();

如果两者之间没有关系,那么你应该重新考虑你的设计。

答案 2 :(得分:0)

我又检查了你的代码, 我发现这是错的 你只需要像这样指定连接参数名称:

new { suject = a.subject, catalog = a.catalog } equals
new { suject = b.subject, catalog = b.Catalogno } into ab