Nic*_*obs 3 .net c# linq linq-to-sql
linq 相对较新,来自 SQL。所以,我试图找出以下的左连接:
SELECT * from MASTER m
LEFT JOIN CHILD C
ON m.ID=C.MASTER_ID
WHERE C.MASTER_ID is null
Run Code Online (Sandbox Code Playgroud)
所以,通常这会返回 Master 没有孩子的所有记录。我发现了 .DefualtIfEmpty() 但这并没有消除有孩子的主记录。
我从以下方面着手:
var recs=from m in MASTER
from c in child
.where (mapping=>mapping.MasterId == m.Id)
.DefaultIfEmpty()
select new { MasterId = m.Id};
Run Code Online (Sandbox Code Playgroud)
但这就是我得到的并被卡住了。我假设 .DefaultIfEmpty() 不是我要找的。注意:主表中有几百万行。孩子们的数量接近相同。我之所以提到,是因为拉回所有记录等效率不高。理想情况下,生成的 SQL 将类似于我发布的 SQL。
谢谢大家。
如果您使用的是 EF,那么您可以使用代表子级的导航属性获取没有子级的母版:
var result= from m in MASTER
where m.Children.Count()==0// or m.Any()
select m;
Run Code Online (Sandbox Code Playgroud)
如果你想在 linq 中使用显式连接来做到这一点,你可以试试这个:
var recs=from m in MASTER
join c in child on m.Id equals C.MasterId into gj
where gj.Count()==0 // or gj.Any()
select m;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6054 次 |
| 最近记录: |