Ну, я думаю, что пытаться понять кого-то еще, 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();
}
}
Это просто выглядит неправильно, неправильно, неправильно и являетсярезультат слепого отслеживания слишком большого количества сообщений в блоге.
Это в правильном направлении?Как я могу упростить то, что происходит?