C# 值不能为null,参数名称:source

C# 值不能为null,参数名称:source,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我将对象集合发送到我的viewmodel,如下所示 控制器 SoundsViewModel model = new SoundsViewModel(sound, AllGroups()); 视图模型 public SoundsViewModel(sound, List<LocationGroup> allGroups) { .... Groups = new List<SoundLocationGroupVie

我将对象集合发送到我的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) });
                } 
            }
        }
显然,这条消息在描述情况时似乎是完美和清晰的,但在消除bug时,我在viewmodel上填充并正确接收了allGroups集合

任何想法,都已经晚了,如果有人能给我一个建议,告诉我如何在明天早上的咖啡中解决这个问题,我将不胜感激

谢谢

更新: 现在已经过去了

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) });
    }
}
源代码可能来自FirstOrDefault()扩展方法:

public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source) 


因为它的价值在于
源代码仍然来自Linq扩展方法,而不是我所认为的方法。由于
sound.LocationGroups
null
异常来自linq语句编译到的扩展方法(我猜
Where
)。

sound.LocationGroups
null
?我会尝试执行var groups=sound.LocationGroups,然后执行groups.FirstOrDefault(o=>o.Id==item.Id);@PaulMcCowat,这仍然会产生相同的错误。
null
检查正常;或者初始化为空集合。谢谢,我应该把它放进去。我要说的是扩展你的观点,消除null的可能性
UserViewModel
构造函数的第一个参数是什么?看起来非常无效的C#这个
声音
东西。它来自哪里?您是否确保它不为空?
public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source) 
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 
    });