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

问题描述 投票:0回答:3

如何在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();

谢谢。

linq
3个回答
0
投票

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

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

0
投票

看来你缺少引用,查询没有错误尝试使用这个:

using System.Linq;

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();

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

© www.soinside.com 2019 - 2024. All rights reserved.