【问题标题】:How to convert SQL query to Linq如何将 SQL 查询转换为 Linq
【发布时间】:2017-02-09 06:16:24
【问题描述】:

我们如何将下面的 SQL 查询转换为 linq (C#)?

SELECT o.Week,
        (select sum(Positive-Negative)
        FROM tbl i
        where i.Week <= o.Week
        )   
    FROM tbl o

我已经尝试过,但我不确定如何总结这些值

var result = from i in weeklySatisfaction
from o in weeklySatisfaction
where i.Week <= o.Week
select new
{
   Week = o.Week,
   Net = i.Positive - i.Negative
};

【问题讨论】:

  • 您的原始 SQL 查询使用“相关子查询”(即直接在 SELECT 子句中的另一个查询。这效率低下。您应该改用 JOIN 或其他方法。
  • 您的原始查询似乎使用了一种非常低效的方法来计算运行总和 - SQL 中更有效的方法是使用 OVER,但是 Linq 不直接支持这一点,并且有一个在 Linq 中计算运行总和的方法非常不同,请参见此处:stackoverflow.com/questions/1834753/…
  • ...总之:您的 SQL 查询不能直接翻译为 Linq,这就解释了您的困难。
  • 你没有提到你使用的是什么类型的 LINQ。你应该展示类模型,这样我们就可以看到实体是如何相关的。

标签: c# sql sql-server linq


【解决方案1】:

这个 linq 代码可以工作

    var values = weeklySatisfaction.Select(o => new 
   { 
     Week = o.Week, 
     Net = weeklySatisfaction
                 .Where(i => i.Week < o.Week)
                 .Select(x => x.Positive - x.Negative).Sum() 
   });

享受吧!

【讨论】:

    猜你喜欢
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多