如何使用键在 Linq-to-SQL 中的两个表之间进行左连接?
How do I put a left join between two tables in Linq-to-SQL using the keys?
我在 Linq to SQL 中编写了查询。我需要在 db.secs
和 db.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。
我在 Linq to SQL 中编写了查询。我需要在 db.secs
和 db.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。