我有一个带有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对应的项目中给出我的名字。有谁知道这样做的正确方法?
答案 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)
什么是b
或b.ID
?
如果它是某种东西,你想使用它,那么
Name = barlist.FirstOrDefault(f => f.Id == foo.Id).Name;
,否则
Name = barlist.FirstOrDefault(f => f.Id == b.Id).Name;