[英]How to join tables using LINQ to Entities query?
我有一個簡單的數據庫結構:
public class Person
{
[Key]
public int PersonID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Transport
{
[Key]
public int TransportID { get; set; }
public string Model { get; set; }
public string Brand { get; set; }
}
public class Accident
{
[Key]
public int AccsidentID { get; set; }
public DateTime AccidentDate { get; set; }
public int TransportID { get; set; }
[ForeignKey("TransportID")]
public virtual Transport Transport { get; set; }
public int PersonID { get; set; }
[ForeignKey("PersonID")]
public virtual Person Person { get; set; }
}
我需要創建事故列表,直到可以將其傳遞給WPF表單(使用MVVM)
首先,我創建了我想在GridControl中看到的新類女巫
public class AccsidentObject
{
[Key]
public int AccidentID { get; set; }
public DateTime AccidentDate { get; set; }
public int TransportID { get; set; }
public string Model { get; set; }
public string Brand { get; set; }
public int PersonID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
你能給我例子嗎?
如果我想從“事故”表中獲取所有值的列表,包括“運輸”和“人”表中的數據
如果要獲取按TransportID分組的事故列表(還包括“人員”和“運輸”表中的數據)
我從Linq查詢中獲取數據:
var result = from ac in DBContext.Accidents select ac;
List<Accident> accidentList = result.toList();
但是我需要添加一些字段以從其他表中列出,這將是什么代碼?
我做錯了什么,無法構造AccidentObject的列表,也許我的DBContext中有一些錯誤,列出了某些東西……請您能幫助我了解List元素嗎?
考慮到我寫了兩部分:
var結果=來自DBContext中的ac.Accidents選擇ac;
結果= result.GroupBy(g => g.TransportID).toList();
現在,我需要添加一些傳輸詳細信息並格式化AccsidentObject列表...
var accidents = DBContext.Accidents.Select( a => new AccidentObject
{
AccidentID = a.AccidentId,
AccidentDate
TransportID
Model
Brand = a.Transport.Brand,
PersonID = a.Person.PersonID,
FirstName
LastName
});
並以幾乎相同的方式填寫空白。 這是一個不使用lambda表達式的linq示例,如果願意,它包括group by子句: Linq to sql select into a new class
要獲取具有急切填充的關聯的實體(或實體集合),請使用Include
擴展方法,或在最終投影中包含您的類型:
var res = await (from a in ctx.Accidents
select new AccsidentObject {
AccidentID = a.AccidentID,
TransportID = a.Transport.TransportID,
Model = a.Transport.Model,
// …
}).ToListAsync();
您可以在LINQ理解表達式中使用groupby
進行分組。 結果, Key
屬性是分組的事物,每個實例是分組的所有事物的集合。
var res = await (from a in ctx.Accidents
group by a.TransportID into g
select new {
TransportID = g.Key,
Accidents = g
}).ToListAsync();
在產生的匿名類型中, Accidents
屬性為Accident
的集合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.