Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要帮助将T-Sql转换为Linq吗_Sql_Linq_Sql To Linq Conversion - Fatal编程技术网

需要帮助将T-Sql转换为Linq吗

需要帮助将T-Sql转换为Linq吗,sql,linq,sql-to-linq-conversion,Sql,Linq,Sql To Linq Conversion,我以前从未使用过Linq,而且真的没有时间学习。我的一知半解不足以做到这一点,我需要你的帮助。 下面是我需要转换成Linq的代码。(我正在使用EF6和上下文) 看 用于进行分区 其余的是相当基本的linq语法 我还没有测试过它或者试图编译它,所以它可能需要一些修改。为了清楚起见,我将查询拆分为类似于问题的部分,但是可以很容易地将它们合并成一行 var messages = smsParseds .OrderBy(o => o.sentTime).GroupBy(g => g.o

我以前从未使用过Linq,而且真的没有时间学习。我的一知半解不足以做到这一点,我需要你的帮助。 下面是我需要转换成Linq的代码。(我正在使用EF6和上下文)

看 用于进行分区

其余的是相当基本的linq语法

我还没有测试过它或者试图编译它,所以它可能需要一些修改。为了清楚起见,我将查询拆分为类似于问题的部分,但是可以很容易地将它们合并成一行

var messages = smsParseds
   .OrderBy(o => o.sentTime).GroupBy(g => g.originator)
   .Select(s => new {s, rk = s.Count()})
   .SelectMany(sm => sm.s.Select(b => b)
      .Zip(Enumerable.Range(1,sm.rk), (j,i) => new {j.siteId, j.originator, j.sentTime, j.mode, j.mainsFrequency, j.gensetFrequency, j.dgBattery, j.runHours, j.fuel, j.messageID, j.messageText, rk = i}));

var result = messages
   .Where(w => w.rk = 1)
   .OrderByDescending(o => o.sentTime)

这不是直接转换(实体框架不能使用行号),但结果应该相同

var query = from m in context.Messages
            where (from x in context.Messages
                   where m.Originator == x.Originator
                   where x.SentTime > m.SentTime
                   select x).Any() == false
            orderby m.SentTime desc
            select new
            {
              m.siteId,
              m.originator,
              m.sentTime,
              m.mode,
              m.mainsFrequency,
              m.gensetFrequency,
              m.dgBattery,
              m.runHours,
              m.fuel,
              m.messageID,
              m.messageText,
            };

所以,如果你自己没有时间来解决这个问题,你怎么会认为这里的任何人都应该花时间为你工作呢?谢谢。我检查了dagarrison和Aducci给出的两种方法。工作Linq中的P.S.“DESC”必须为“descending”。由于原始查询基于分区进行筛选,因此此查询返回的行数将比所需的多。@dagarrison,这是怎么回事?where子句只包括每个发起者的最新记录。哦,我知道你在做什么了。你是对的,我错了。我总是需要一些时间来准确地处理
x.SentTime>m.SentTime
正在做的事情。
var query = from m in context.Messages
            where (from x in context.Messages
                   where m.Originator == x.Originator
                   where x.SentTime > m.SentTime
                   select x).Any() == false
            orderby m.SentTime desc
            select new
            {
              m.siteId,
              m.originator,
              m.sentTime,
              m.mode,
              m.mainsFrequency,
              m.gensetFrequency,
              m.dgBattery,
              m.runHours,
              m.fuel,
              m.messageID,
              m.messageText,
            };