我认为尝试理解别人的SQL已经够难了,但是尝试将该SQL转换为Entity Framework则是另一种痛苦的境地...
这是我的SQL:
SELECT
MAX(IntegerColumn) - MIN(IntegerColumn)
/
DateDiff(day, MIN(DateColumn) , MAX(DateColumn))
*
DateDiff(day, MAX(DateColumn) , @TargetDate)
+
MAX(IntegerColumn)
AS Calculation
FROM MyTable
WHERE TargetId = @TargetId
忘记了运算符优先级,到目前为止,我想出了以下LINQ to Entities,我对其持极度怀疑:
var calculation =
(from f in this.ObjectContext.MyTable
where f.TargetId == targetId
group f by f.IntegerColumn into o
let maxIntegerColumn = o.Max(x => x.IntegerColumn)
let minIntegerColumn = o.Min(x => x.IntegerColumn)
let maxDate = (from t in o select t.DateColumn).Max()
let minDate = (from t in o select t.DateColumn).Min()
select new
{
Result = (maxIntegerColumn - minIntegerColumn) /
((SqlFunctions.DateDiff("day", minDate, maxDate) *
SqlFunctions.DateDiff("day", maxDate, targetDate)) + maxIntegerColumn)
}).FirstOrDefault();
if (calculation != null)
{
if (calculation.Result != null)
{
return calculation.Result.ToString();
}
}
这看起来完全不对,是盲目跟随太多博客文章的结果。
这是正确的方向吗?我该如何简化正在发生的事情?