即使 child 为 null,Linq 连接也返回 parent
Linq join returning parent even when child is null
我想select fake2 为空的所有行以及在 fake2 上有连接的所有行
下面的代码做得很好,但我想在 select linq 查询中完成所有操作以提高效率。
var rows = (
from a in crmLinqContext.fakeSet
join b in crmLinqContext.fake2Set on a.fake2.Id equals b.Id
join c in crmLinqContext.fake3Set on b.field equals c.field
where c.anotherField == "THIS_BIT_OF_TEXT"
select a);
List<myObject> objects = new List<myObject>();
foreach(var row in rows)
{
objects.Add(row);
}
rows = (
from a in crmLinqContext.fakeSet
where s.fake2 == null
select a);
foreach (var row in rows)
{
objects.Add(row);
}
return objects;
var rows = (
from a in crmLinqContext.fakeSet
join b in crmLinqContext.fake2Set on a.Id equals b.Id
join c in crmLinqContext.fake3Set on b.field equals c.field
where c.anotherField == "THIS_BIT_OF_TEXT"
select a)
.Concat(
from a1 in crmLinqContext.fakeSet
where a1.fake2 == null
select a1);
在 linq 中使用左连接,如下所示,它没有经过测试,但它所做的是左外连接 fakeSet 和 fakeSet2。
var rows =
from a in crmLinqContext.fakeSet
join b in crmLinqContext.fake2Set on a.fake2.Id equals b.Id into subset
from b in subset.DefaultIfEmpty()
join c in crmLinqContext.fake3Set on b.field equals c.field
where c.anotherField == "THIS_BIT_OF_TEXT"
select a;
我想select fake2 为空的所有行以及在 fake2 上有连接的所有行 下面的代码做得很好,但我想在 select linq 查询中完成所有操作以提高效率。
var rows = (
from a in crmLinqContext.fakeSet
join b in crmLinqContext.fake2Set on a.fake2.Id equals b.Id
join c in crmLinqContext.fake3Set on b.field equals c.field
where c.anotherField == "THIS_BIT_OF_TEXT"
select a);
List<myObject> objects = new List<myObject>();
foreach(var row in rows)
{
objects.Add(row);
}
rows = (
from a in crmLinqContext.fakeSet
where s.fake2 == null
select a);
foreach (var row in rows)
{
objects.Add(row);
}
return objects;
var rows = (
from a in crmLinqContext.fakeSet
join b in crmLinqContext.fake2Set on a.Id equals b.Id
join c in crmLinqContext.fake3Set on b.field equals c.field
where c.anotherField == "THIS_BIT_OF_TEXT"
select a)
.Concat(
from a1 in crmLinqContext.fakeSet
where a1.fake2 == null
select a1);
在 linq 中使用左连接,如下所示,它没有经过测试,但它所做的是左外连接 fakeSet 和 fakeSet2。
var rows =
from a in crmLinqContext.fakeSet
join b in crmLinqContext.fake2Set on a.fake2.Id equals b.Id into subset
from b in subset.DefaultIfEmpty()
join c in crmLinqContext.fake3Set on b.field equals c.field
where c.anotherField == "THIS_BIT_OF_TEXT"
select a;