我的代码中有这个Linq C#查询:
var res = from i in context.Instrument
join g in context.FtpServerGroup on i.FtpServerGroupId equals g.Id
join f in context.FtpServer on g.Id equals f.FtpServerGroupId
where i.Deleted && f.NetAddress == netaddress
select i;
我需要将它转换为.NET核心使用的另一种语法(LINQ扩展方法),这里是一个与上一个查询无关的示例:
context.Instrument.Where(w => !w.Deleted).Include(x => x.FtpServerGroup).ThenInclude(x => x.FtpServers).FirstAsync(i => i.Id == id);
我的问题是,我找不到将第一个查询(三重连接)转换为另一种语法的方法。关于如何找到一些文档或如何做的任何建议?
答案 0 :(得分:2)
有了resharper的力量:
var res =context.Instrument.Join(context.FtpServerGroup, i => i.FtpServerGroupId, g => g.Id, (i, g) => new {i, g})
.Join(context.FtpServer, @t => g.Id, f => f.FtpServerGroupId, (@t, f) => new {@t, f})
.Where(@t => i.Deleted && f.NetAddress == netaddress)
.Select(@t => i);
答案 1 :(得分:2)
Jon Skeet有一个很好的cheat sheet(向下滚动),用于将查询语法翻译成方法语法。
您的查询转换为:
var res = context.Instrument.Join(context.FtpServerGroup, i => i.FtpServerGroupId, g => g.Id, (i,g) => new {i,g})
.Join(context.FtpServer, x => x.g.Id, f => f.FtpServerGroupId, (f, x) => new {f, x.g, x.i})
.Where(x => x.i.Deleted && x.f.NetAddress == netaddress)
.Select(x => x.i);