2016-09-29 59 views
1

我有一個簡單的數據庫結構:如何使用LINQ to Entities查詢連接表?

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. ,如果我想從事故表包括運輸數據和Person表

  2. ,如果我想獲得通過TransportID分組事故列表(也包括人與運輸表中的數據)

所有值的列表

我從Linq查詢獲取數據:

var result = from ac in DBContext.Accidents select ac; 
List<Accident> accidentList = result.toList(); 

但我需要添加一些領域從其他表中列出,這將是一個代碼?

,該怎麼辦錯了,無法構建AccidentObject的名單,也許有一些錯誤在我的DbContext,列出Ø東西......你能幫我瞭解列表元素?

考慮到2部分我寫道:

VAR結果=從DBContext.Accidents交流選擇交流電;

結果= result.GroupBy(G => g.TransportID).toList();

現在我需要增加一些運輸細節和形式AccsidentObject列表...

+0

第一部分是簡單的:不是'選擇ac'使用'選擇新AccsidentObject {AccidentID = ac.AccidentID等...}'(使用相應的'ac','交流分配AccsidentObject'的'所有屬性.Transport'和'ac.Person'字段) –

+0

謝謝,第一部分解決了...我真的錯過了選擇新的AccidentObject {} – Songaila

回答

1

要獲得協會急切地填充使用的實體(或實體的集合)的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的集合。

+0

以及如何顯示這些事故?其實我只需要這個事故列表......但不知道如何將它傳遞給WPF表格 – Songaila

+0

@Songaila從內部集合,數據庫或其他資源獲取數據應該是任何APF教程的一部分。這確實超出了[SO]答案的範圍。 – Richard

1
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