亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅支持初始值設定項,實體成員和實體導航屬性

僅支持初始值設定項,實體成員和實體導航屬性

僅支持初始值設定項,實體成員和實體導航屬性我得到了這個例外: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 關注
  • 886 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號