[英]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();
在 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.