是否可以使用C#中的LEAD
或LAG
SQL函数?
我对方法的偏好是:
我知道可以通过方法5完成,但是1到4呢?
答案 0 :(得分:2)
查看MoreLinq项目(在github上):http://morelinq.github.io
在那里,Lead和Lag被实现为扩展:
public static IEnumerable<TResult> Lag<TSource, TResult>(
this IEnumerable<TSource> source,
int offset,
TSource defaultLagValue,
Func<TSource, TSource, TResult> resultSelector
)
参考:https://morelinq.github.io/2.0/ref/api/html/M_MoreLinq_MoreEnumerable_Lag__2_1.htm
编辑:这只是Linq to Objects。因此,当应用于SQL数据源时,它将获取所有行,然后在数据库外进行计算。这不是OP所期望的。
研究结果说“没有,对于项目1,2,3和4来说是不可能的”:
LEAD
和LAG
在SQL Server 2012中出现,但最新版本的Linq to SQL(Framework 4.6.1)以版本特定代码为目标的最高版SQL服务器是2008 :http://referencesource.microsoft.com/#System.Data.Linq/SqlClient/SqlProvider.cs,2fac3481a656764b SqlFunctions
会提供潜在客户,延迟或类似内容:https://msdn.microsoft.com/en-us/library/system.data.objects.sqlclient.sqlfunctions(v=vs.110).aspx 答案 1 :(得分:1)
很棒的lib linq2db
https://github.com/linq2db/linq2db支持Window-Functions和LEAD
和LAG
:
from p in db.Parent
join c in db.Child on p.ParentID equals c.ParentID
select new
{
Diff = Sql.Ext
.Lag(x.time, Sql.Nulls.None)
.Over()
.PartitionBy(p.time.Date)
.OrderBy(p.time)
.ToValue()
};