0

我有 2 个名为 Person 和 Activity 的表。每个人可以有多个活动。

Person 中的字段是 PersonId、Name、Age。Activity中的字段有ActivityId、PersonId、Description、StartDate、EndDate、Flag

我创建了一个名为 PersonAndLatestActivity 的新实体,它具有来自 Person 和 Activity 的一些类似命名的字段。即PersonId、姓名、年龄、描述、开始日期、结束日期、标志

如何将每个人和他们的 LATEST 活动投影到 PersonAndLatestActivity 实体中?

我需要使用 LINQ for Entities 来实现这一点,因为我使用的是 EF4 Code First,即:-

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

        }                
    return result;
}
4

2 回答 2

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;
}
于 2012-07-04T07:23:53.353 回答
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,否则你应该使用连接。

于 2012-07-06T19:52:37.177 回答