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个表无关。如果没有实际的表,实际的索引,实际的查询,你就让人们猜彩票的号码