LINQ转换不会给出与我的SQL查询相同的结果
大家好,我有一个SQL查询MSSQL,我正在做一个查询,其中连接的结果按日期为我提供最新行的顶行,而没有重复的结果,你们可以在这里找到我正在做的事情的信息,我已经完成了SQL查询,正在按照我的预期工作,在pi.PlazaIe所在的子句中,每个IDKEY使用一行,没有重复LINQ转换不会给出与我的SQL查询相同的结果,sql,linq,linq-to-sql,Sql,Linq,Linq To Sql,大家好,我有一个SQL查询MSSQL,我正在做一个查询,其中连接的结果按日期为我提供最新行的顶行,而没有重复的结果,你们可以在这里找到我正在做的事情的信息,我已经完成了SQL查询,正在按照我的预期工作,在pi.PlazaIe所在的子句中,每个IDKEY使用一行,没有重复 Select * from PlazaI pi join ( Select * from PlazaE pe where NOT EXISTS(SELECT 1 FROM PlazaE pe1 WHE
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')
当我运行这个linq2sql查询时,我得到的是重复的结果,而不是每个值只有1个。问题是,我想知道是否有人能以一种好的方式将SQL查询转换为LINQ查询,或者告诉我错误在哪里
提前感谢。您的支票日期不同: 林克: SQL: 你的LINQ不是应该是:
pe1.Fecha < DateTime.Now
本部分:
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,然后使用PlazaE——在Linq中,两次都使用PlazaEmpeados。将SQL查询放入存储过程,然后将其添加到上下文中。然后打电话:
var q = context.MyProcedure(new object[] {"value1","value2"});
我没有找到解决我问题的答案,所以我最终做的是使用
db.ExecuteQuery<ObjectVO>(sqlQuery);
我知道这不是最佳实践,也没有解决为什么我的sql查询和我的linq查询没有得到相同的结果集的问题,但是前面的答案中没有
另一件事是我的查询变得越来越复杂,新的业务逻辑要求必须连接7个表,搜索最大日期和移动是其中的一部分,因此现在将查询转换为linq到sql更为复杂
感谢您的支持。用于将sql查询转换为linq表达式检查我编辑的帖子。我添加了另一个解决方案。虽然这确实是一个错误,但我在Linq中仍然得到重复的行,并且正在SQL中工作。我将尝试sqltolinq,看看会发生什么..嗨,我实际上解决了这个问题,不管是这个答案还是我用var rawSql=db.ExecuteQuerysqlQuery做的其他答案;感谢您的支持,至少我在回答中给出了a+1:我正在努力,但我认为子查询的这一部分相当好,因为我试图在db中获得所有pe。PlazaE PlazaEmpleados PlazaEmpleados是我代码中的真实名称抱歉,这一部分是子查询不存在,。我认为这是错误的写下它您的意思是声明一个新的存储过程并运行查询?,这是不可能的,因为我无法在数据库中创建新的存储过程。或者你是什么意思?我这样做了,只是为了防止使用存储过程,我使用了来自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 q = context.MyProcedure(new object[] {"value1","value2"});
db.ExecuteQuery<ObjectVO>(sqlQuery);