簡體   English   中英

EntityFramework Core 加入后得到多個結果

[英]EntityFramework Core get multiple results after join

該數據庫具有表 Machines、Wheels、Characteristics。 汽車的1個記錄包括一個車輪和幾個特征的4個記錄。 在數據庫中,它看起來像這樣: 在此處輸入圖片說明

我想獲取關於汽車的最后5個條目,包括一組完整的參數數據和車輪信息。 我想在一個請求中獲取所有數據。

 var result = (from Machines in db.Machines.Where(x => x.param == 2) orderby Machines.ID descending
                      join wheel in db.Wheels on Machines.ID equals wheel.MachineId
                      join param in db.Characteristcs on Machines.ID equals param.MachineId
                      select new { Machines, param, wheel } 
                      ).Take(5).ToList();

但它只返回一個車輪記錄和一個特征。

我認為您應該首先查看您的模型是否已為您需要的實體定義了導航屬性:

public class Machine {

  public int ID {get;set;}
  //...
  //Navigation Properties
  public IList<Wheel> Wheels {get;set;}
  public IList<Charateristic> Charateristics {get;set;}

}

如果是這種情況,您的查詢將是:

var query= context.Machines.Include(m=> m.Wheels)
                           .Include(m=>m.Charateristics)
                           .Where(x => x.param == 2)
                           .Take(5)
                           .ToList();

Include方法有助於構建查詢,從相關表中獲取您需要的數據。

如果你沒有定義導航屬性,我強烈建議你這樣做,你可以做組加入

var query=  from m in context.Machines
            join c in context.Charateristics on m.Id equals c.MachineId into gc
            join w in context.Wheels on m.Id equals w.MachineId into gw
            select new {Machine= m, Wheels= gw, Charateristics=gc };

var result= query.Take(5).ToList();
  1. 在 SQL Server 中,創建 Machine 與 Wheels 和 Characteristic 表的關系。
  2. 重新運行 scaffolding-dbcontext 以更新您的 EF dbcontext 和模型
  3. 使用包含 linq。 var 結果 = db.Machines.Where(x => x.Id == 2).Include(x => x.Wheels).Include(x => x.Characteristics);

看截圖

在 EF Core 中,您可以參考關系加載相關數據以獲取更多詳細信息。

這是我的工作演示:

模型

public class Machines
{
    public int Id { get; set; }
    public string Description { get; set; }
    public string Color { get; set; }
    public int Weight { get; set; }
    public int Param { get; set; }
}
public class Characteristics
{
    public int Id { get; set; }
    public string Parameter { get; set; }
    public string Value { get; set; }
    public string Description { get; set; }

    public int MachineId { get; set; }
}
public class Wheels
{
    public int Id { get; set; }
    public int Radius { get; set; }
    public int Weight { get; set; }
    public int MachineId { get; set; }
}

控制器

public IActionResult GetCars()
{
        var collection = (from Machines in _context.Machines.Where(x => x.Param == 2)
                      join wheel in _context.Wheels on Machines.Id equals wheel.MachineId
                      join param in _context.Characteristics on Machines.Id equals param.MachineId
                      select new { Machines, param, wheel }
                  ).ToList();

        //get the last 5 entries about cars
        var result= collection.Skip(Math.Max(0, collection.Count() - 5)).ToList();
        return new JsonResult(result);
}

暫無
暫無

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

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