Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 实体框架自定义字段_Asp.net Mvc_Entity Framework - Fatal编程技术网

Asp.net mvc 实体框架自定义字段

Asp.net mvc 实体框架自定义字段,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我有一个SQL表,我通过实体框架访问该表,该表包含两列,一列用于成本价,另一列用于销售价。我的表名为inventory,因此我有一个名为inventory的实体,它包含两个属性:costPrice和salePrice 我想要的是第三列,它将计算两个字段之间的差异。此外,我希望允许从视图中对三列中的任何一列进行排序。到目前为止,我调查的几个选项如下: 向SQL表中添加新列-我不允许实际执行此操作 当我通过EF获取数据时,使用分部类扩展inventory类并设置自定义字段-我不能这样做,因为这意味着

我有一个SQL表,我通过实体框架访问该表,该表包含两列,一列用于成本价,另一列用于销售价。我的表名为inventory,因此我有一个名为inventory的实体,它包含两个属性:costPrice和salePrice

我想要的是第三列,它将计算两个字段之间的差异。此外,我希望允许从视图中对三列中的任何一列进行排序。到目前为止,我调查的几个选项如下:

向SQL表中添加新列-我不允许实际执行此操作

当我通过EF获取数据时,使用分部类扩展inventory类并设置自定义字段-我不能这样做,因为这意味着我必须从表中获取所有500000条记录,将它们放入列表,并根据自定义字段执行此列表的排序,这将非常缓慢

在视图中执行计算-这可以用于显示数据,但我无法排序

最后,创建一个SQL视图来保存这三列,然后将SQL视图添加到EF。这很好,是我找到好解决方案的唯一方法

我只是觉得必须有一种更现代的方法在EF中实现这一点,而不是使用SQL视图? 任何想法或建议都会大有帮助

添加第三个属性(列到实体):

然后通过这种方式从上下文中选择

db.Entities
    .Where(...)
    .Select(x => new { Blabla1 = x.Prop1, Blabla2 = x.Prop2, Blabla3 = (x.Prop2 - x.Prop1) }) // select what you need here + the difference. !ANONYMOUS TYPE!
    .OrderBy(x => x.Blabla3)
    .Select(x => new Entity { Prop1 = x.Blabla1, Prop2 = x.Blabla2 }) // !CONVERT TO THE TYPE YOU NEED!
    .ToList();
请注意,您将在此处选择匿名类型。如果需要,可以将其转换为最后一行所需的类型

db.Entities
    .Where(...)
    .Select(x => new { Blabla1 = x.Prop1, Blabla2 = x.Prop2, Blabla3 = (x.Prop2 - x.Prop1) }) // select what you need here + the difference. !ANONYMOUS TYPE!
    .OrderBy(x => x.Blabla3)
    .Select(x => new Entity { Prop1 = x.Blabla1, Prop2 = x.Blabla2 }) // !CONVERT TO THE TYPE YOU NEED!
    .ToList();