簡體   English   中英

如何使用LINQ to Entities查詢聯接表?

[英]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; }
 }

你能給我例子嗎?

  1. 如果我想從“事故”表中獲取所有值的列表,包括“運輸”和“人”表中的數據

  2. 如果要獲取按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.

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