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

sourceFirstOrDefault() 拡張メソッドから来ている可能性があります。

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

何らかの理由で、Linq クエリが null を返しています。2 つの手順で試してみてください ( 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拡張メソッドからまだ来ているからです。linqステートメントがコンパイルされる拡張メソッド(私は推測します)から例外が発生しているsound.LocationGroupsためです。nullWhere

于 2012-08-22T21:04:18.530 に答える