1

我像这样将对象集合发送到我的视图模型

控制器

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

显然,此消息在描述情况下似乎是完美且清晰的,但在调试时,我正在填充 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) });
    }

}

4

1 回答 1

2

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来自 linq 语句被编译到的扩展方法(我猜Where)。

于 2012-08-22T21:04:18.530 回答