LINQ到实体-M到M选择返回的列多于所需

时间:2018-11-12 14:10:21

标签: c# linq linq-to-entities

我有以下情况,工作正常:

IQueryable<Experiment> experiments1 = _db.Experiments.Where(e => e.Projects.Any(p => p.Id == project.Id));
IQueryable<Experiment> experiments2 = _db.Experiments.Where(e => e.Tools.Any(m => m.Project.Id == project.Id));
var experimentsList = experiments1.Union(experiments2).OrderBy(e => e.Date).Select(e => new
    {
    e.Id,
    e.Name,
     e.Date
    }).ToList();

使用SQL配置文件进行检查,这将转换为1个SQL查询,该查询可以从联合中正确提取 Id 名称日期

当我使用多对多连接表执行联接时,会出现问题:

var experimentsList = experiments1.Union(experiments2).OrderBy(e => e.Date).Select(e => new
{
  e.Id,
  e.Name,
  e.Date,
  e.Types.Select(t => t.Name)
  // or also just e.Types
}).ToList();

由于某些原因,生成的SQL查询不仅返回“所需”列,而且还返回实验表中的所有列和其他指定的列(即类型名称)。

这会导致演出损失很大。

顺便说一句,在我稍后需要执行的代码中:

experimentsList.Select(e => new
{
  e.Id,
  e.Name,
  e.Date,
  Types = string.Join(", ", e.Types)
})

因此,我需要更快的方式在内存中具有ID,名称,日期和类型列表。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以试试吗? Coloum名称可能需要更改

var result = from exp in _db.Experiments
join t in _db.Types on exp.TypeID = t.Id
select new
{
  exp.Id,
  exp.Name,
  exp.Date,
  t.Name
}).ToList();