我有以下情况,工作正常:
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,名称,日期和类型列表。
谢谢!
答案 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();