2012-07-04 13 views
0

我有兩個名爲Person和Activity的表。每個人可以有多個活動。將多個LINQ實體組合成一個實體,包括頂級相關記錄

Person中的字段爲PersonId,Name,Age。 Activity中的字段爲ActivityId,PersonId,Description,StartDate,EndDate,Flag

我創建了一個名爲PersonAndLatestActivity的新實體,它具有Person和Activity中一些類似命名的字段。即PersonId,姓名,年齡,說明,開始日期,結束日期,標記

如何將每個人及其最新活動投影到PersonAndLatestActivity實體?

我需要這個使用LINQ的實體,因爲我使用EF4代碼首先實現即: -

public IQueryable<PersonAndLatestActivity> GetAllPeopleAndLatestActivityList() 
{ 
    var result = (from x in db.People 
     select new 
     { 

     }     
    return result; 
} 

回答

0

我不知道你怎麼能做到這一點作爲一個可查詢的,但如果它幫助,這是我如何與對象做到這一點:

public IQueryable<PersonAndLatestActivity> GetAllPeopleAndLatestActivityList() 
{ 
    List<PersonAndLatestActivity> list = new List<PersonAndLatestActivity>(); 
    foreach(person in db.People.ToList()){ 
     var act = db.Activity.Where(x=>x.PersonId == person.PersonId).OrderBy(x=>x.Date).Single(); 
     list.Add(new PersonAndLatestActivity{ 
      PersonId = person.PersonId, 
      ActivityId = act.ActivityId, 
      etc... 
     }); 
    } 
    return result; 
} 
0

這是一個辦法做到這一點:

from p in db.People 
from a in p.Activities.OrderByDescending(act => act.StartDate).Take(1) 
select new PersonAndLatestActivity { p.PersonId, ..., a.StartDate, ... } 

假設有一個導航連接屬性p.Activities,否則您應該使用連接。

相關問題