LINQ中的左外连接如何在C#LINQ对象中不使用join-on-equals-into条款?有没有办法where条款?正确的问题:因为内部连接很容易,我有这样的解决方案List<JoinPair> innerFinal = (from l in lefts from r in rights where l.Key == r.Key
select new JoinPair { LeftId = l.Id, RightId = r.Id})但对于左外接,我需要一个解决方案。我的是这样的,但不起作用List< JoinPair> leftFinal = (from l in lefts from r in rights select new JoinPair {
LeftId = l.Id,
RightId = ((l.Key==r.Key) ? r.Id : 0
})JoinPair是一个类:public class JoinPair { long leftId; long rightId; }
4 回答
MMTTMM
TA贡献1869条经验 获得超4个赞
var q =
from c in categories
join p in products on c.Category equals p.Category into ps from p in ps.DefaultIfEmpty()
select new { Category = c, ProductName = p == null ? "(No products)" : p.ProductName };
神不在的星期二
TA贡献1963条经验 获得超6个赞
from maintable in Repo.T_Whatever from xxx in Repo.T_ANY_TABLE.Where(join condition).DefaultIfEmpty()
DefaultIfEmpty()
from c in categories join p in products on c equals p.Category into ps from p in ps.DefaultIfEmpty()
注from alias in Repo.whatever.Where(condition).DefaultIfEmpty()
详细实例
var query2 = (
from users in Repo.T_User from mappings in Repo.T_User_Group .Where(mapping => mapping.USRGRP_USR == users.USR_ID)
.DefaultIfEmpty() // <== makes join left join
from groups in Repo.T_Group .Where(gruppe => gruppe.GRP_ID == mappings.USRGRP_GRP)
.DefaultIfEmpty() // <== makes join left join
// where users.USR_Name.Contains(keyword)
// || mappings.USRGRP_USR.Equals(666)
// || mappings.USRGRP_USR == 666
// || groups.Name.Contains(keyword)
select new
{
UserId = users.USR_ID ,UserName = users.USR_User ,UserGroupId = groups.ID ,GroupName = groups.Name
});var xy = (query2).ToList();SELECT users.USR_ID AS UserId ,users.USR_User AS UserName ,groups.ID AS UserGroupId ,groups.Name AS GroupName FROM T_User AS users LEFT JOIN T_User_Group AS mappings ON mappings.USRGRP_USR = users.USR_ID LEFT JOIN T_Group AS groups ON groups.GRP_ID == mappings.USRGRP_GRP
编辑:
var query2 = (
from users in Repo.T_Benutzer
join mappings in Repo.T_Benutzer_Benutzergruppen on mappings.BEBG_BE equals users.BE_ID into tmpMapp
join groups in Repo.T_Benutzergruppen on groups.ID equals mappings.BEBG_BG into tmpGroups from mappings in tmpMapp.DefaultIfEmpty()
from groups in tmpGroups.DefaultIfEmpty()
select new
{
UserId = users.BE_ID ,UserName = users.BE_User ,UserGroupId = mappings.BEBG_BG
,GroupName = groups.Name
});- 4 回答
- 0 关注
- 1123 浏览
添加回答
举报
0/150
提交
取消
