2012-10-09 54 views
1

是否可以從EF查詢中填充列表?我的DTO如下:使用ENtity框架查詢填充DTO類List <>

public DTO() 
{ 
    public string ClientName { get; set;} 
    public List<string> RelatedCodes { get; set;} 
} 

我的填充方法DTO =

Public DTO MyResult(string ClientCode) 
{ 
    return (from o in repository.RelatedClient 
      where o.LeadCode == ClientCode 
      select new DTO { ClientName = o.ClientName, RelatedCodes = o.RelatedCodes.ToList()}); 
} 

我知道在查詢中,或者我不應該添加ToList()我可以我很做錯誤。任何人都可以建議如何做到這一點。我的DTO在這個例子中被減少了,但是如果可能的話,我想在一個DTO中使用一個實體查詢來擁有很多單個屬性和一個列表(或者幾個列表)?

因此,下面的答案下面我假設沒有辦法查詢這個直接。我原來的選項將是:

Public DTO MyResult(string ClientCode) 
{ 
     var temp = (from o in repositry.RelatedCode Where o.LeadCode == ClientCode select o).ToList(); 

      DTO dto = (from o in repository.LeadClient Where o.LeadCode == ClientCode Select o.ClientName).Firstordefault(); 

     foreach(string rc in temp) 
      { dto.RelatedCode.Add(rc);} 
     return dto; 

    } 

我很滿意的,但將不勝感激,如果有人可以提供建議,如果這是對付沒有像automapper的正確方法。我試圖學習實體框架,並希望檢查我不缺少一些內置的功能。

+0

的Automapper也可能會被你的新朋友從現在開始。 –

+0

這裏是他正在談論的AutoMapper的鏈接:http://nuget.org/packages/automapper – sergserg

+0

我現在使用Automapper來處理這些東西。這真棒 - 使用它 – Luthervd

回答

2

喜歡的東西:

var dtoEntity = repo.RelatedClient.SingleOrDefault(x => x.LeadCode == ClodeCode); 

DTO d = new DTO(); 
d.ClientName = dtoEntity.ClientName; 
foreach (var relatedCode in dtoEntity.RelatedCodes) 
{ 
    d.RelatedCodes.Add(relatedCode); 
} 

return d; 

使用這種方法,你可以添加儘可能多的屬性,只要你願意。不過,我建議使用AutoMapper。

更多在這裏閱讀:

http://nuget.org/packages/automapper

+0

絕對AutoMapper!不要重新發明輪子:) – Juri

相關問題