0

他の2つのリストのプロパティを入力したいIDと名前のリストがあります。

List<Foo> foolist = foo.fromdatasource(); // for all items in this list
List<Bar> = barlist from bar.datasource(); // fill a new list with Name property from this list

List<ViewModel> viewModel = new List<ViewModel>();

foreach (Foo foo in foolist)
{
   viewmodel.Add(new ViewModel
   {
      Id = foo.Id
      Name = barlist.Where(f => f.Id == b.Id).Select(s => s.Name)
   });
}

その最後の行は、foolistのidに対応するbarlistのアイテムの名前を教えてくれません。誰かがこれを行う正しい方法を知っていますか?

4

2 に答える 2

2

最後の行を以下の行に置き換えます。

Name = barlist.First(f => f.Id == b.Id).Name;

例外を回避するためのより多くの制約についてnullは、次のように記述できます。

var viewModels = foo.Select(f => {
    var bar = barlist.FirstOrDefault(b => f.Id == b.Id);

    return new ViewModel() { 
        Id = f.Id, 
        Name = bar == null? null : bar.Name 
    };
});

SingleOrDefaultの代わりにメソッドを使用することもできます。あなたはユニークFirstOrDefaultだと思うので、同じ結果になります。Id

于 2013-03-24T17:49:28.420 に答える
1

とは何bですかb.ID

それが何かであり、あなたがそれを使いたいのなら、

Name = barlist.FirstOrDefault(f => f.Id == foo.Id).Name;

そうでなければ

Name = barlist.FirstOrDefault(f => f.Id == b.Id).Name;
于 2013-03-24T17:50:11.873 に答える