2016-04-28 44 views
0

我目前正在編寫一個非常基本的Web API應用程序,並且我有一個案例,我想要檢索附加到數據實體的集合中的第一個項目。使用Lambda表達式檢索子集合中的第一個項目

舉個例子,讓我們說我有以下的POCO類:

class Parent { 
    int ParentId { get; set; } 
    string Name { get; set;} 
    string Description { get; set; } 

    virtual ICollection<Child> Children { get; set; } 
} 

class Child { 
    int ChildId { get; set;} 
    string Name {get; set;} 

    int ParentId { get; set; } 
    Parent Parent {get; set;} 
} 

這表明這兩個實體之間的一對多關係。假設DbContext不是問題,其他所有工作都正常。我想沿行執行的東西:「與孩子們收集的第一個條目給我所有的父記錄」

DbContext.Parent.Include(d=>d.Children.Take(1)).ToList();

概括地說,但是我不能把這個上班。任何幫助將不勝感激。伴隨着只有一個孩子,你需要創建一個類說,父子像

DbContext.Parent.Include(d => d.Children.FirstOrDefault()).ToList(); 

或者,如果你希望所有的父母:

+0

其實你想要的新對象?選擇包含第一個孩子的第一個父元素? – Mostafiz

+0

我畢竟帶有一個孩子記錄的父項目返回。注意:我並非畢竟有子女記錄數的父項== 1 –

+0

您是否想要每個父母的所有父母和第一個孩子?或者你想讓所有父母和唯一一個孩子與所有父母一起? –

回答

0

如果你希望所有的父母與每個父母的第一個孩子一起,用這個這樣的:

Public class ParentChild 
{ 
    ICollection<Parent> Parents { get; set; } 
    Child OneChild {get;set;}   
} 

現在,從獲取的DbContext這個對象,如:

var obj= new ParentChild() 
{ 
    Parents= DbContext.Parent.ToList(), 
    Child= DbContext.Child.FirstOrDefault(), 
} 

並在你的應用程序中使用這個對象obj。

+0

謝謝@manoj我意識到我可以構建一個域對象,但我想知道是否存在可以容納的lambda方法 –

+0

是的,Lambda方法將可用於任何對象集合。 –

+0

嘿@Matthew,如果我的回答對你有幫助,請接受答案,並加入它。 –

0

假設DbContext不是問題,其他所有工作都正常。 你可能需要創建一個新的投影來實現你想要的。

var projection = DbContext.Parent.Include(p => p.Children).Select(p => new { 
    ParentId = p.ParentId, 
    Name = p.Name, 
    Description = p.Description, 
    Child= p.Children.FirstOrDefault() 
}; 

否則在更改返回父僅在第一個孩子可能會造成不必要的問題返回:如果保存了要在數據庫中作出。

但是你可以這樣做......

var projection = DbContext.Parent.Include(p => p.Children).Select(p => new Parent { 
    ParentId = p.ParentId, 
    Name = p.Name, 
    Description = p.Description, 
    Children = p.Children.Take(1).ToList() 
}; 

..這將創建一個沒有連接到上下文

+0

這與我第一次去,我只是想知道是否有更好的方法 –

+0

@MatthewMerryfull我想我有它。 'DbContext.Parent.Include(d => d.Children.Take(1).ToList())ToList();'。孩子是'ICollection',我不相信'Take'返回'ICollectoion'。嘗試一下,讓我知道。我會更新我的答案。 – Nkosi

相關問題