2

私は LINQ と、一般に多くの最新のデータ駆動型アプリケーション設計手法にかなり慣れていないため、これはかなり基本的な質問かもしれません。

いくつかの異なる Entity Framework エンティティの単純なプレゼンテーション モデルへの投影を作成しようとしています。親エンティティ (プロパティは ID、名前、年齢) と子エンティティ (プロパティは ID、名前、年齢、親への参照) があるとします。これらをすべてのプロパティが同じである PresentationParent と PresentationChild に投影したいのですが、PresentationParent には List があります。LINQでこれを行うにはどうすればよいですか?

from p in entities.Parent
select new PresentationParent
{
    ID = p.ID,
    Name = p.Name,
    Age = p.Age,
    Children = [[?? What goes here ??]]
}

これはまったく正しい軌道に乗っていますか?単純で平らな投影の例しか見つけられないようです。

4

2 に答える 2

4

このようなもの:

from p in entities.Parent
select new PresentationParent {
    ID = p.ID,
    Name = p.Name,
    Age = p.Age,
    Children = (from c in entities.Child
                where c.Parent == p
                select new PresentationChild {
                    ID = c.ID,
                    Name = c.Name,
                    Age = c.Age
                }).ToList()
}

ただし、エンティティには、必要な外部キー関係が既に構成されている必要があるため、次のようにすることができます。

from p in entities.Parent
select new PresentationParent {
    ID = p.ID,
    Name = p.Name,
    Age = p.Age,
    Children = p.Children.ToList()
}

もちろん、それは各子のすべてのプロパティを返すので、とにかく子を射影したいかもしれません:

from p in entities.Parent
select new PresentationParent {
    ID = p.ID,
    Name = p.Name,
    Age = p.Age,
    Children = (from c in p.Children
                select new PresentationChild {
                    ID = c.ID,
                    Name = c.Name,
                    Age = c.Age
                }).ToList()
}
于 2010-01-26T21:50:40.880 に答える
0

アクセサーを利用できるように関係が十分に設定されていない場合は、別の方法があります。

from p in entities.Parent
from c in entities.Children on p.ID equals c.parentID into children
select new PresentationParent
{
    ID = p.ID,
    Name = p.Name,
    Age = p.Age,
    Children = children.ToList()
}
于 2010-01-26T22:10:32.817 に答える