为了账号安全,请及时绑定邮箱和手机立即绑定

仅支持初始值设定项,实体成员和实体导航属性

仅支持初始值设定项,实体成员和实体导航属性

仅支持初始值设定项,实体成员和实体导航属性我得到了这个例外:LINQ to Entities不支持指定的类型成员'付费'。仅支持初始值设定项,实体成员和实体导航属性。    public ActionResult Index()     {         var debts = storeDB.Orders             .Where(o => o.Paid == false)             .OrderByDescending(o => o.DateCreated);         return View(debts);     }我的Model类public partial class Order{     public bool Paid {         get {             return TotalPaid >= Total;         }     }     public decimal TotalPaid {         get {             return Payments.Sum(p => p.Amount);         }     }付款是一个包含字段数量的相关表格,如果我删除Where子句显示有关付款的正确信息,查询有效,任何线索有什么问题?解决了如下建议的答案:    public ActionResult Index()     {         var debts = storeDB.Orders             .OrderByDescending(o => o.DateCreated)             .ToList()             .Where(o => o.Paid == false);         return View(debts);     }
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

实体正在尝试将您的Paid属性转换为SQL,但不能,因为它不是表模式的一部分。

你可以做的是让实体查询表没有付费过滤器,然后过滤掉非付费过滤器。

public ActionResult Index(){
    var debts = storeDB.Orders
        //.Where(o => o.Paid == false)
        .OrderByDescending(o => o.DateCreated);

    debts = debts.Where(o => o.Paid == false);

    return View(debts);}

当然,这意味着您将所有数据带回Web服务器并过滤其上的数据。如果要在数据库服务器上进行筛选,可以在表上创建计算列或使用存储过程。


查看完整回答
反对 回复 2019-08-27
?
BIG阳

TA贡献1859条经验 获得超6个赞

只是不得不解决类似的问题。上述解决方案需要内存处理,这是一种不好的做法(延迟加载)。

我的解决方案是编写一个返回谓词的帮助器:

public static class Extensions{
    public static Expression<Func<Order, bool>> IsPaid()
    {
        return order => order.Payments.Sum(p => p.Amount) >= order.Total;
    }}

您可以将linq语句重写为:

var debts = storeDB.Orders
                    .Where(Extensions.IsPaid())
                    .OrderByDescending(o => o.DateCreated);

当您想重用计算逻辑(DRY)时,这很方便。缺点是逻辑不在您的域模型中。


查看完整回答
反对 回复 2019-08-27
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

Linq将语句转换为SQL语句并将其执行到数据库中。

现在,此转换仅适用于实体成员,初始值设定项和实体导航属性。因此,要实现函数或获取属性比较,我们需要先将它们转换为内存列表,然后应用函数来检索数据。

因此,总的来说,

var debts = storeDB.Orders.toList()
        .Where(o => o.Paid == false)
        .OrderByDescending(o => o.DateCreated);


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 843 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信