接著在 Controller 這樣使用:
List<Orders> orders = db.Orders .Where(x => x.Customers.CustomerID == id) .ToList(); List<Order_Details> order_details = db.Order_Details .Include(x => x.Orders) .Include(x => x.Products) .Where(x => orders.Exists(p => x.Orders.OrderID == p.OrderID)) .ToList();
就會發生「LINQ to Entities 無法辨識方法 'Boolean Exists(System.Predicate`1[MVVMwithExtjs.Models.Orders])' 方法,而且這個方法無法轉譯成存放區運算式。」
後來發現,LINQ to SQL 時無法產生相同的 function,除非你在 SQL Server 上建立相同的預存程序,但是 Where 內又必須使用 LINQ Expression 篩選,可以參考 當EF LINQ Expression遇上Methods、如何於LINQ to Entities中使用SQL Server的使用者自訂函數,可能可以解決這個問題,但是都頗麻煩的,所以後來把這資料先實例化出來再做篩選:
List<Orders> orders = db.Orders .Where(x => x.Customers.CustomerID == id) .ToList(); List<Order_Details> order_details = db.Order_Details .Include(x => x.Orders) .Include(x => x.Products) .ToList() .Where(x => orders.Exists(p => x.Orders.OrderID == p.OrderID)) .ToList();
沒有留言 :
張貼留言