0

Person と Activity という 2 つのテーブルがあります。各人は複数のアクティビティを持つことができます。

Person のフィールドは、PersonId、Name、Age です。アクティビティのフィールドは、ActivityId、PersonId、Description、StartDate、EndDate、Flag です。

PersonAndLatestActivity という名前の新しいエンティティを作成しました。このエンティティには、Person と Activity から同様の名前のフィールドがいくつかあります。すなわち、PersonId、Name、Age、Description、StartDate、EndDate、Flag

各個人とその LATEST アクティビティを PersonAndLatestActivity エンティティに投影するにはどうすればよいですか?

私はEF4 Code Firstを使用しているので、LINQ for Entitiesを使用してこれを達成する必要があります。

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

        }                
    return result;
}
4

2 に答える 2

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 に答える
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 に答える