我正在向我的viewmodel发送对象集合,如下所示
控制器
SoundsViewModel model = new SoundsViewModel(sound, AllGroups());
视图模型
public SoundsViewModel(sound, List<LocationGroup> allGroups)
{
....
Groups = new List<SoundLocationGroupViewModel>();
if (allGroups !=null)
{
foreach (var item in allGroups)
{
var i = (from r in sound.LocationGroups where r.Id == item.Id select r).FirstOrDefault();
Groups.Add(new SoundLocationGroupViewModel() { LocationGroupId = item.Id, LocationGroupName = item.Name, IsInLocationGroup = (i != null) });
}
}
}
错误消息
Value cannot be null.
Parameter name: source
var i = (from r in sound.LocationGroups where r.Id == item.Id select r).FirstOrDefault();
显然,这个消息在描述情况下似乎是完美和清晰的,但在重新布局时,我正在使用viewmodel填充并正确接收allGroups集合。
任何想法,已经很晚了,如果有人建议我如何在tommorow早晨咖啡中解决这个问题,我会非常感激。
由于
更新: 现在它已经过去了。
foreach (var item in allGroups)
{
if(sound.LocationGroups !=null)
{
var i = (from r in sound.LocationGroups where r.Id == item.Id select r).FirstOrDefault();
Groups.Add(new SoundLocationGroupViewModel() { LocationGroupId = item.Id, LocationGroupName = item.Name, IsInLocationGroup = (i != null) });
}
}
答案 0 :(得分:1)
source
可能来自FirstOrDefault()扩展方法:
public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source)
由于某种原因,您的Linq查询返回null。分两步尝试(并使用Any
代替FirstOrDefault
,因为您只是检查非空结果):
bool isInGroup;
var q = (from r in sound.LocationGroups where r.Id == item.Id select r);
isInGroup = (q != null && q.Any());
Groups.Add(new SoundLocationGroupViewModel()
{
LocationGroupId = item.Id,
LocationGroupName = item.Name,
IsInLocationGroup = isInGroup
});
击> <击> 撞击>
它的价值source
仍然来自Linq扩展方法,而不是我想到的那个。由于sound.LocationGroups
是null
,因此扩展方法(我猜Where
)会将linq语句编译为。