C# 如何用lambda链接左连接
如果我有C# 如何用lambda链接左连接,c#,.net,linq,lambda,entity-framework-core,C#,.net,Linq,Lambda,Entity Framework Core,如果我有 class A { int id; IQueryable<B> bs; } class B { int id; int AId; IQueryable<C> cs; } class C { int id
class A
{
int id;
IQueryable<B> bs;
}
class B
{
int id;
int AId;
IQueryable<C> cs;
}
class C
{
int id;
int AID
int Bid;
}
我怎么能用lambda做到这一点?我知道一般情况下,左连接是通过组连接完成的,但我不知道如何获取c所需的密钥,这在我使用的实体框架版本ef core 3.0中无法实现,因为它不支持组连接。希望这会改变这能回答你的问题吗?看看答案,lambda不是真的。我可以让第一个join正常工作,这就是示例中他们所做的。我的问题是加入第三种类型这可能是一个很好的学术问题,但在现实世界中你是在浪费时间,因为当你使用对象集合时,直线LINQ比lambda连接快得多。如果最终使用LINQtoSQL,那么最终可能会出现错误的查询。由于性能(LINQ到对象)和查询正确性(LTS),我已经完成了用LINQ替换所有lambda(带有连接)的练习。我没有注意到性能有问题。也许你处理的数据集比我大,但你说得对,这在很大程度上是一个学术问题,因为我可以使用ado轻松解决我自己的问题,并执行sql,这将比两者都快。从我以前的工作电子邮件:
var data=From a in listA From b in listB。其中(x=>x.Id==a.Id)选择a;//~3.5秒
和var data=从列表a中的a将b加入a中的列表b。Id等于b。Id选择a;//~0.03秒
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