0

我有一个包含 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)
   });
}

最后一行没有给我来自 barlist 的项目的名称,该名称对应于来自傻瓜的 id。有谁知道这样做的正确方法?

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

什么是bb.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 回答