【发布时间】:2020-06-11 22:36:32
【问题描述】:
假设我有
class A
{
int id;
IQueryable<B> bs;
}
class B
{
int id;
int AId;
IQueryable<C> cs;
}
class C
{
int id;
int AID
int Bid;
}
and in sql i could join them like
select * from A
left join b on a.Id = B.AID
left join c on a.ID = c.AId and b.id = c.bID
我怎么能用 lambda 做到这一点?我知道一般左加入是通过组加入完成的,但我不知道如何获取 c 所需的密钥
【问题讨论】:
-
这能回答你的问题吗?看答案,用 lambda LEFT OUTER JOIN in LINQ
-
并非如此。我可以让第一个加入工作得很好,这就是他们在示例中所做的。我的问题在于加入第三种类型
-
这可能是一个很好的学术问题,但在现实世界中你是在浪费你的时间,因为当你使用对象集合时,直接 LINQ 比 lambda 连接快得多。如果你最终使用 Linq-to-sql,你最后也可能有错误的查询。由于性能(linq to objects)和查询正确性(LTS),我已经完成了用 LINQ 替换所有 lambdas(带有连接)的练习。
-
我没有注意到性能问题。也许您正在处理比我更大的数据集,但您说得对,这主要是一个学术问题,因为我可以使用 ado 轻松解决我自己的问题并执行 sql,这将比任何一个都快。
-
来自我的旧工作电子邮件:
var data = from a in listA from b in listB.Where(x => x.Id == a.Id) select a; // ~ 3.5 sec和var data = from a in listA join b in listB on a.Id equals b.Id select a; // ~ 0.03 sec
标签: c# .net linq lambda entity-framework-core