大家好我有这个SQL查询(MSSQL),我正在进行一个查询,其中连接的结果给了我最新行的“顶部”行,没有重复的结果,你可以在这里找到的信息我正在做什么http://goo.gl/Uv0FR事情就是这样,我已经完成了SQL查询,正如我所期待的那样工作,我为每个IDKEY使用了一行“在哪里使用pi.PlazaIe in( '','')没有重复
Select * from PlazaI pi
join (
Select * from PlazaE pe where
NOT EXISTS(SELECT 1 FROM PlazaE pe1
WHERE pe.Id_plaza = pe1.Id_plaza AND pe1.Fecha > pe.Fecha AND pe1.Fecha < GETDATE() and pe1.Id_Emp != 0)
) pe on pe.Id_plaza = pieepo.Id_plaza
join Emp e on pe.Id_Emp = e.Id_Emp
join View ct on ct.Id_Nodo = pe.id_nodo
where pi.PlazaIe in ('value1','value2')
问题是当我试图从SQL转换为LINQ时,只是无法实现。 (我是Linq这个世界的新人)
以下是我的linq查询。
var q1 = (from pe in db.PlazaEmpleados
where !db.PlazaEmpleados.Any
(
pe1 => (pe1.Id_plaza.Equals(pe.Id_plaza) && pe1.Fecha > pe.Fecha && pe1.Id_Emp != 0 && pe1.Fecha > DateTime.Now)
) select pe);
var q2 = (from pi in db.Context
join pe in (q1) on pi.Id_plaza equals pe.Id_plaza
select new EmpVO
{
Id_Nodo = pe.id_nodo,
Id_plaza = pi.PlazaSome,
Num_Plaza = pi.Id_plaza,
});
当我运行这个linq2sql查询时,我得到重复的结果,而不是每个值只有1。所以问题是,我想知道是否有人能够以良好的方式将SQL查询转换为LINQ查询,或者指出错误在哪里。
提前感谢。
答案 0 :(得分:6)
您对日期的检查有所不同:
LINQ:
pe1.Fecha > DateTime.Now
SQL:
pe1.Fecha < GETDATE()
你的LINQ不应该是:
pe1.Fecha < DateTime.Now
答案 1 :(得分:1)
我找不到解决问题的答案,所以我最后做的是使用
db.ExecuteQuery<ObjectVO>(sqlQuery);
我知道这不是最好的做法,也没有解决为什么我的sql查询和我的linq查询没有得到相同的结果集的问题,但没有先前的答案。
另一件事是我的查询增加了复杂性(新的业务逻辑要求)必须加入7表并搜索Max日期和移动是其中的一部分,所以现在将查询转换为linq到sql更复杂。
感谢您的支持。
答案 2 :(得分:0)
这一部分:
var q1 = from pe in db.PlazaEmpleados
where !db.PlazaEmpleados.Any
(pe1 =>
pe1.Id_plaza.Equals(pe.Id_plaza) &&
pe1.Fecha > pe.Fecha &&
pe1.Id_Emp != 0 &&
pe1.Fecha < DateTime.Now
)
select pe;
在SQL中,你首先使用PlazaI,然后在Linq使用PlazaE-,你们两次都使用PlazaEmpleados。
答案 3 :(得分:0)
将SQL查询放入存储过程并将其添加到上下文中。然后打电话:
var q = context.MyProcedure(new object[] {"value1","value2"});