C# Linq左联接表与另一个表的子集
考虑一下这个问题C# Linq左联接表与另一个表的子集,c#,entity-framework,linq,C#,Entity Framework,Linq,考虑一下这个问题 var query = from A in _context.A.AsExpandable().Where(condition) let B = _context.B .Where(a=> a.Id == B.Id) .Select(x=> new {
var query = from A in _context.A.AsExpandable().Where(condition)
let B = _context.B
.Where(a=> a.Id == B.Id)
.Select(x=> new
{
x.Id,
x.Name
}).ToList()
select new {A.Id, B }
var res = query.ToList()
生成的T-SQL类似于
SELECT [t0].Id, [s].Id, [s].Name
FROM A AS[t0]
LEFT JOIN [B] AS [s] ON [t0].[Id] = [s].[Id]
我在想,与其连接整个表,不如连接表的子集(可能是只获取两列而不是所有列的内部连接),以提高性能
它的基本功能是将表A与表B连接起来,我尝试将表A与表B的子集(Id、名称)连接起来,而不是选择所有列
为什么不仅仅是一个
join
(基于a.Id==b.Id
)和一个select
?@CamiloTerevinto我也尝试过使用join,但没有得到我所希望的T-SQL语句,因为我面临性能问题,所以我尝试了不同的技术,但我不知道或者不知道我正在使用的一些方法,但它确实调整了我的性能。现在我只是想知道是否有可能得到一个包含大量列的表的子集。@CamiloTerevinto请建议我是否可以使用连接而不是我使用的方法。感谢you@CamiloTerevinto我已经用我期待的查询的想法更新了这个问题。PS我必须连接15-20个表才能得到结果,加载1000条记录需要花费很长时间,但我使用sql profiler和调优工具提到的投影和添加索引将其缩短到1分钟,但我仍然不满意,大多数表都是1对多关系,我完全是一个性能转换的初学者,只是尝试不同的方法,而这与实际查询中的20个表无关。如果没有实际的表、实际的索引、实际的查询,你就要让人们猜测彩票的数字。为什么不仅仅是一个join
(基于a.Id==b.Id
)和一个select
?@CamiloTerevinto呢?我也尝试过使用join,但没有得到我所希望的T-SQL语句,因为我面临性能问题,所以我尝试了不同的技术,但我不知道或者不知道我正在使用的一些方法,但它确实调整了我的性能。现在我只是想知道是否有可能得到一个包含大量列的表的子集。@CamiloTerevinto请建议我是否可以使用连接而不是我使用的方法。感谢you@CamiloTerevinto我已经用我期待的查询的想法更新了这个问题。PS我必须连接15-20个表才能得到结果,加载1000条记录需要花费很长时间,但我使用sql profiler和调优工具提到的投影和添加索引将其缩短到1分钟,但我仍然不满意,大多数表都是1对多关系,我完全是一个性能转换的初学者,只是尝试不同的方法,而这与实际查询中的20个表无关。如果没有实际的表,实际的索引,实际的查询,你就让人们猜彩票的号码