【问题标题】:How to convert T-SQL into LINQ如何将 T-SQL 转换为 LINQ
【发布时间】:2013-04-13 09:25:57
【问题描述】:

我在 T-SQL 查询中有以下代码,我需要将其转换(重写)为 LINQ。有人可以帮助我吗?谢谢

SELECT (select max(X.PocetDniPoPlatnosti) 
from
(

select 

(select top 1 datediff(day,datumplatnosti,getdate()) from planrealizace p 
where p.cinnostsopidsop = cinnostsop.idsop and datumplatnosti <= getdate() and p.provest = 1 and p.datumprovedeni is null
order by p.datumplatnosti desc) as PocetDniPoPlatnosti

from cinnostsop
where cinnostSOP.LegislativneVyznamna = 1 and (CinnostSOP.ObjektId = 131476)) X) as PoPlatnosti

【问题讨论】:

标签: sql sql-server linq tsql


【解决方案1】:

这应该可以,但我无法尝试,因为我家里没有任何编程工具,所以如果这不起作用,请随时告诉我,我们可以一起改进它

var max = (from cp in cinnostsop.Where(c => c.LegislativneVyznamna = 1 && c.ObjektId = 131476) 
           join p in (
               planrealizace.
               Where(pz => pz.datumplatnosti <= DateTime.Now && 
                           pz.provest = 1 and pz.datumprovedeni is null).
               GroupBy(pz => pz.cinnostsopidsop, pz => pz).
               Select(g => 
                   new { 
                           id = g.Key, 
                           firstdate = (g.OrderByDescending(
                                              pz => pz.datumplatnosti).
                                          First().datumplatnosti - DateTime.Now
                                        ).Totaldays
                        })
               ) on cp.idsop equals p.id
           select p.firstdate).Max(d => d);

【讨论】:

  • new { cinnostsopidsop 我觉得这里会有一些问题,我在哪里可以得到它?
  • 应该没问题, new { cinnostsopidsop = g.Key } 正在创建一个匿名对象,该对象具有名为 cinnostsopidsop 的属性,它的值是组的键。当我们按 pz.cinnostsopidsop 进行分组时,该组的键将是 cinnostsopidsop。如果您不太确定这种语法是如何工作的,只需 google 'anonymous object'
  • 也许我应该给它一个新名字,这样它就不会混淆。检查答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多