4

私はLinqを初めて使用するわけではありませんが、何らかの理由でこの問題を解決できません。

次のモデルがあるとしましょう。明らかにこれはサンプル モデルです。

public class Parent
{
    public int Id { get; set; }
    public List<Child> Children { get; set; }
    public DateTime CreateDate { get; set; }
}

public class Child
{
    public int Id { get; set; }
    public List<Toys> Toys { get; set; }
    public DateTime CreateDate { get; set; }
}

public class Toys
{
    public string Id { get; set; }
    public string Name { get; set; }
    public DateTime CreateDate { get; set; }
}

私が欲しいのは、それらをViewModelに変換することです。ここで私のViewModelがどのように定義されているか

public class ParentViewModel
{
    public int Id { get; set; }
    public List<ChildViewModel> Children { get; set; }
}

public class ChildViewModel
{
    public int Id { get; set; }
    public List<ToysViewModel> Toys { get; set; }
}

public class ToysViewModel
{
    public string Id { get; set; }
    public string Name { get; set; }
}

私の問題

モデルを選択してビューモデルに変換するにはどうすればよいですか? これが私がすでに試したことです。

var q = from p in dbContext.Parents
        where p.Id = 123
        select new ParentViewModel
        {
           Id = p.Id,
           Children = ???
        };

子供とそのおもちゃのリストを取得するにはどうすればよいですか?

前もって感謝します!

4

6 に答える 6

12

リレーションがデータベースで適切にモデル化されている場合、

select new ParentViewModel
{
   Id = p.Id,
   Children = p.Children.Select(c => new ChildViewModel {
       Id = c.Id,
       Toys = c.Toys.Select(t => new ToyViewModel { ... }).ToList()
   }).ToList()
};
于 2012-05-11T09:07:46.317 に答える
1

Automampperなどの自動マッピング ツールの使用を検討してください。

どこかにマッピングを定義します。

Mapper.CreateMap<Parent, ParentViewModel>();
Mapper.CreateMap<Child, ChildViewModel>();
Mapper.CreateMap<Toys, ToysViewModel>();

そしてあなたのコード

 Parent parent = GetParentById(123); // use LINQ to get parent
 ParentViewModel pvm = Mapper.Map<ParentViewModel>(parent);
于 2012-05-11T09:20:21.020 に答える
0

独自のスタイルを維持するには:

var q = from p in dbContext.Parents
    where p.Id == 123
    select new ParentViewModel
    {
        Id = p.Id,
        Children = (from c in p.Children
                    select new ChildViewModel()
                    {
                        Id = c.Id,
                        Toys = (from t in c.Toys
                                select new ToyViewModel() 
                                {
                                    Id = t.Id,
                                    Name = t.Name
                                }).ToList()
                    }).ToList()
    };

Toyそして、代わりにToysToyViewModelの代わりに呼び出しますToysViewModel

于 2012-05-11T09:17:56.323 に答える
0

AutoMapperを使用してエンティティをモデルに変換します。コレクションをうまくサポートします。

于 2012-05-11T09:09:33.317 に答える
0

これのことですか?

var q = from p in dbContext.Parents
    where p.Id = 123
    select new ParentViewModel
    {
       Id = p.Id,
       Children = p.Children.Select(c => new ChildViewModel
       {
           Id = c.Id,
           Toys = c.Toys.Select(t => new ToysViewModel
           {
               Id = t.Id
           }).ToList()
       }).ToList()
    };
于 2012-05-11T09:10:18.363 に答える