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

Linq左外连接两个字段上的两个表,linq,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

如何在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查询,但在“join”下面有一个错误下划线,调用“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();

谢谢。

您似乎缺少引用,查询没有错误 尝试使用以下方法:

using System.Linq;

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

courselist
Summary
之间应该有一个关系,在这种情况下,您可以通过
courselist
访问
Summary
,如下所示:

var searchResults = (from a in db.courselist
                     where  a.degree_id == 1 
                     orderby a.degree_sequenceNo
                     select new {
                         Courselist = a,
                         Summary = a.Summary
                     }).ToList();
new { suject = a.subject, catalog = a.catalog } equals
new { suject = b.subject, catalog = b.Catalogno } into ab

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

我再次检查了您的代码, 我发现这是我的错 您只需按如下方式指定联接参数名称:

var searchResults = (from a in db.courselist
                     where  a.degree_id == 1 
                     orderby a.degree_sequenceNo
                     select new {
                         Courselist = a,
                         Summary = a.Summary
                     }).ToList();
new { suject = a.subject, catalog = a.catalog } equals
new { suject = b.subject, catalog = b.Catalogno } into ab

我正在尝试获取汇总表“description”字段,这就是我想要联接两个表的原因。Courselist有一些没有描述的记录,所以我需要进行左外连接。是的,但是如果它们设计正确,两者之间必须存在关系,因此当您编写
a.Summary
a.Summary.description
时,它会自动为您进行左连接。从关系中判断需要什么类型的联接是足够聪明的。您可以检查我的答案生成的SQL,您将看到它使用了
左连接
。试试看,
courselist
上是否有
Summary
属性?谢谢您的回复。我读到一些帖子说它会自动进行左连接,但我测试了一下,结果没有。所以我在ab中使用了某人的建议new{suject=a.subject,catalog=a.catalog}等于new{suject=b.subject,catalog=b.Catalogno},它起到了作用。是的,如果在您的例子中没有使用
左连接
,这表明设计是错误的。检查您的数据库表和关系并修复它们,而不是试图强制LINQ使用某些会导致不使用索引且性能会受到严重影响的内容。错误消息为“LINQ-”,join子句中某个表达式的类型不正确。调用“GroupJoin”时类型推断失败但我检查了所有数据类型是否匹配。非常感谢!你是我的救世主:)