如何使用键在 Linq-to-SQL 中的两个表之间进行左连接?

How do I put a left join between two tables in Linq-to-SQL using the keys?

我在 Linq to SQL 中编写了查询。我需要在 db.secsdb.subs 之间放置左连接,即 db.subs 左 table 而 db.secs

我写了这篇文章,但不知道该怎么做?

var qry = (from sr in db.secs
           join s in db.subs
           on sr.Id equals s.secId
           join ss in db.subsSt
           on s.Id equals ss.subId
           join u in db.usersNew
           on s.uid equals u.Id
           where ss.isNew 
           group s by new { s.uid, u.UName, sr.Id, sr.Name } into totalGrp
           select new
           {
               CreatorName = totalGrp.Key.UName,
               SecName = totalGrp.Key.Name,
               TotalRecs = totalGrp.Count()
           }).OrderBy(o => o.CreatorName)
           .ToList();

如何让它重新排列成第一个 table? 在 angular 和 HTML 中,我正在循环收集并在 table 中呈现。

您必须在第二个 table 上使用 DefaultIfEmpty() 来生成外部连接或在商店中使用导航属性。类似于

var query = from sr in db.secs
            join s in db.subs into secSubs
            from srs in secSubs.DefaultIfEmpty()
            // rest of the query follows

或者使用导航属性,您可以执行类似

的操作
var query = from sr in db.secs
            from s in sr.Subs
            select new {sr, s}

第三种选择是可能使用准 ANSI-82 语法而不是 ANSI-92 连接语法,并使上面的第一项更 pallatable:

var query = from sr in db.secs
            from s in db.Subs.Where(s1 => s1.subId == sr.Id).DefaultIfEmpty()
            select new {sr, s}

不久前我在 https://www.thinqlinq.com/Post.aspx/Title/Left-Outer-Joins-in-LINQ-with-Entity-Framework 写了一篇更详细的 post。