【发布时间】:2016-03-04 04:54:54
【问题描述】:
我正在尝试执行此 Linq 表达式,但 LEFT JOIN 正在复制行。
当我在 SQL 中编写这个完全查询时,它工作正常,但是当我在 Linq 表达式中编写它时,LEFT JOIN 复制了该行。
我试图分组..但我得到了相同的结果。
var sql = (from project in db.Project
join suitT in db.SuitT
on project.Id equals suitT.IdProject
join inspec in db.Inspec
on suitT.Id equals inspec.IdSuitT
join listFinalDef in db.ListFinalDef
on inspec.Id equals listFinalDef.IdInspec
into myListFinalDef
from groupListFinalDef in myListFinalDef.DefaultIfEmpty()
join artefact1 in db.Artefact
on groupListFinalDef.Id equals artefact1.IdListFinalDef
into myArtefact1
from groupArtefact1 in myArtefact1.DefaultIfEmpty()
join artefact2 in db.Artefact
on inspec.Id equals artefact2.IdInspec
into myArtefact2
from groupArtefact2 in myArtefact2.DefaultIfEmpty()
join typeArtefact in db.TypeArtefact
on inspec.IdTypeArtefact equals typeArtefact.Id
where ...
select new ArtefactModels
{
IdArtefact1 = groupArtefact1.Id,
IdArtefact2 = groupArtefact2.Id,
...,
...,
...
}).ToList();
发生了什么:复制行
示例
Id: 1 | ProjectName: Project 1 | InspecTitle: Title 1
Id: 1 | ProjectName: Project 1 | InspecTitle: Title 1
Id: 2 | ProjectName: Project 2 | InspecTitle: Title 2
Id: 2 | ProjectName: Project 2 | InspecTitle: Title 2
我正在尝试做的事情:
示例
Id: 1 | ProjectName: Project 1 | InspecTitle: Title 1
Id: 2 | ProjectName: Project 2 | InspecTitle: Title 2
已编辑:
我正在尝试使用 LINQ 表达式执行此 SQL:
SELECT art1.Id AS IdArtefact1, art2.Id AS IdArtefact2, ...
FROM
Project
INNER JOIN SuitT ON Project.Id = SuitT.IdProject
INNER JOIN Inspec ON SuitT.Id = Inspec.IdSuitT
LEFT JOIN ListFinalDef ON Inspec.Id = ListFinalDef.IdInspec
LEFT JOIN Artefact AS art1 ON ListFinalDef.Id = art1.IdListFinalDef
LEFT JOIN Artefact AS art2 ON Inspec.Id = art2.IdInspec
INNER JOIN TypeArtefact ON Inspec.IdTypeArtefact = TypeArtefact.Id
WHERE ...
【问题讨论】:
-
你想用 linq 写什么 sql 查询?
-
如果你的数据模型是正确的,你就不应该有那么复杂的
Linq查询 -
简短的回答是使用 Select(your propreties).Distinct().ToList()。但从您的查询来看,您的设计存在一些问题。
-
对于您需要的简单结果,您的查询似乎非常困难。你能复制你的模型吗? (在结果上调用 Distinct() 是最简单的,但这当然是一个非常糟糕的解决方案:p)
-
使用 linq distinct 函数。
标签: c# sql-server entity-framework asp.net-mvc-5 linq-expressions