簡體   English   中英

EF無法獲取實體導航屬性的參考實體

[英]EF can't get the reference entity of navigation property of an entity

這是我的模特班

public class Serve
{
    public int Id { get; set; }
    public Table Table { get; set; }
    public bool IsFinished { get; set; }
    public decimal TotalMoney { get; set; }
    public virtual ICollection<Order> Orders { get; set; }
}
public class Order
{
    public int Id { get; set; }
    public Item Item { get; set; }
    public int Numbers { get; set; }
    public bool IsCheifReceived { get; set; }
    public bool IsCheifCooked { get; set; }
    public Serve Serve { get; set; }

    public Order()
    {
        IsCheifCooked = IsCheifReceived = false;
    }
}

public class Item
{
    public int Id { get; set; }    
    public string Name { get; set; }    
    public string Unit { get; set; }
    public decimal Price { get; set; }    
    public Category Category { get; set; }    
    public bool IsNeedToNotifyChief { get; set; }
}

我想對按相同項目(這是餐廳的菜單項)分組的訂單的數量和總金額求和。

這是LINQ查詢。

var serving = db.Serves
                    .Where(m => m.Table.Id == table.Id)
                    .Where(m => m.IsFinished == false)
                    .OrderByDescending(m => m.Id)
                    .FirstOrDefault();

var groupedOrder = serving.Orders
                        .OrderByDescending(m => m.Id)
                        .GroupBy(m => m.Item)
                        .Select(g => new
                        {
                            Item = g.Key,
                            Numbers = g.Sum(ri => ri.Numbers)
                        }).ToList();

但是在這種情況下,在.GroupBy(m => m.Item)m.Itemnull ,它將所有Orders分組為一組。 (我知道問題是此查詢中未加載m.Item

在這里,我不知道如何使m.Item加載到此LINQ查詢中。 請幫我做到這一點。

PS:我使用實體框架6

我認為變量服務是某些對象的列表,而不是查詢。 如果我是對的,那么當您從數據庫獲得服務時,應該包括項目 它看起來像下面的代碼:

var serving = db.Serves
                 .Include(x => x.Orders)
                 .Include(x => x.Orders.Select(x => x.Item)) //here you'll get your items
                 .Where(m => m.Table.Id == ta && m.IsFinished == false)
                 .OrderByDescending(m => m.Id)
                 .FirstOfDefault();

//and after that your code should work correctly

if(serving != null) //don't forget check it, if you use FirstOfDefault()
{
   var groupedOrder = serving.Orders
            .OrderByDescending(m => m.Id)
            .GroupBy(m => m.Item) 
            .Select(g => new
            {
                Item = g.Key,
                Numbers = g.Sum(ri => ri.Numbers)
            }).ToList();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM