我坚持一个问题,我一直在寻找解决方案,但没有多少运气。实体框架中的计算属性
使用实体框架代码首先,我需要能够创建一个计算属性,不需要在计算之前加载所有对象。
// Psuedo Code for what I need
public class GoodInventoryChange
{
public int GoodID { get; set; }
public double Amount { get; set; } // Amount of change
public DateTime OccurredAt { get; set; } // Timestamp of the change
public double RunningTotal { get { /* CODE TBD*/ } } // Prior record plus amount
}
所有的,我已经找到了如何做到这一点的建议需要调用.ToList()或类似的,这可能需要记录许多1000,以便找到一个条目被加载。
最后,我需要查询的能力:
// Psuedo Code
int goodID = 123;
var lowestRunningTotal = (from item in Context.GoodInventoryChanges
where item.GoodID == goodID && DateTime.Now <= item.OccurredAt
orderby item.RunningTotal
select item).FirstOrDefault();
我使用RunningTotal来作为例子,但我有大约15至20场需要以类似的方式来计算的。
有没有人有任何建议或方向指向我?我知道我可以强制它,但我希望通过实体框架的SQL层来实现它。
我很高兴在数据库中创建计算字段,如果有一个好的方法将它们映射到实体框架类。
关键位在单词“先前记录”中。这需要外部输入,因此不可能将计算的属性封装在'GoodInventoryChange'类中。这通常是在单独的查询或专用域模型中要做的事情。对于可以封装的计算属性,你可以看看[DelegateDecompiler](https://github.com/hazzik/DelegateDecompiler)。 –
使用视图怎么样? –