C# 如何通过linq、扩展方法或纯sql执行此查询?

C# 如何通过linq、扩展方法或纯sql执行此查询?,c#,.net,sql,linq-to-sql,C#,.net,Sql,Linq To Sql,我有一张桌子在下面 first second ------- ---------- 100 0 200 0 0 400 我想得到下面的结果 first second result ------- ---------- ---------- 100 0 100 200 0 300 0 400

我有一张桌子在下面

 first      second
-------     ----------
100        0
200        0
0           400
我想得到下面的结果

 first      second      result
-------     ---------- ----------
100        0            100
200        0            300
0           400         -100
正如您所看到的,结果参数是前一个(第一个和)的和 我如何编写这样的查询

这是一个“运行总计”查询。这可以在SQL中完成,但这取决于表的布局方式

这是一个的“运行总计”查询。这可以在SQL中完成,但这取决于表的布局方式


以下是如何使用LINQ(包括安装程序)执行此操作:


下面介绍如何使用LINQ(包括设置):

公共类数据项
{
公共int First{get;set;}
公共整数秒{get;set;}
}
公共静态void Main(字符串[]args)
{
列表数据=新列表
{
新数据项{First=100,Second=0},
新数据项{First=200,Second=0},
新数据项{First=0,Second=400}
};
var结果=数据。选择((项目,索引)=>新建
{
第一个=项目。第一个,
第二项=第二项,
结果=数据.Take(索引+1).Sum(x=>x.First-x.Second)
});
}
公共类数据项
{
公共int First{get;set;}
公共整数秒{get;set;}
}
公共静态void Main(字符串[]args)
{
列表数据=新列表
{
新数据项{First=100,Second=0},
新数据项{First=200,Second=0},
新数据项{First=0,Second=400}
};
var结果=数据。选择((项目,索引)=>新建
{
第一个=项目。第一个,
第二项=第二项,
结果=数据.Take(索引+1).Sum(x=>x.First-x.Second)
});
}

mysql解决方案非常简单,但简单的解决方案正在寻找mssql

set @result =0;
select first, second, @result := @result + first - second as result
from tablo; 
结果
mysql解决方案非常简单,但简单的解决方案正在寻找mssql

set @result =0;
select first, second, @result := @result + first - second as result
from tablo; 
结果
请解释关闭原因以便我可以尝试编辑问题请解释关闭原因以便我可以尝试编辑问题
public class DataItem
{
    public int First { get; set; }
    public int Second { get; set; }
}

public static void Main(string[] args)
{
    List<DataItem> data = new List<DataItem>
        {
            new DataItem { First = 100, Second = 0 },
            new DataItem { First = 200, Second = 0 },
            new DataItem { First = 0, Second = 400 }
        };

    var result = data.Select((item, index) => new
        {
            First = item.First,
            Second = item.Second,
            Result = data.Take(index + 1).Sum(x => x.First - x.Second)
        });
}
set @result =0;
select first, second, @result := @result + first - second as result
from tablo; 
first  second  result  
100    0       100 
200    0       300 
0      400     -100