LINQ:使用来自2个不同模型</viewmodel>的属性填充列表<viewmodel>

时间:2013-03-24 17:47:20

标签: c# linq

我有一个带有ID和名称的List,我想用其他两个列表填充属性。

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)
   });
}

最后一行没有从barlist中与来自foolist的id对应的项目中给出我的名字。有谁知道这样做的正确方法?

2 个答案:

答案 0 :(得分: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是唯一的

答案 1 :(得分:1)

什么是bb.ID

如果它是某种东西,你想使用它,那么

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

,否则

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