5

2 つのコレクションから最終的な結果セットを取得する次の LINQ クエリがあります:usersAdusersWithSecurity:

var results = from usrAd in usersAd
              from usrRepo in usersWithSecurity
                             .Where(x => usrAd.Value.ToLower() == x.Value.ToLower())
                             .DefaultIfEmpty()
      select new User(userRepository)
      {
        ID = usrRepo == null ? null : usrRepo.ID,
        Value = usrAd.Value,
        FullName = usrAd.FullName
      };

問題は、次のエラーが発生し続けることです。Value cannot be null.

問題は、usersWithSecurityコレクションが空であることです。最後に「.DefaultIfEmpty()」を追加しましたが、それでも例外が発生します。

LINQ ステートメントを変更して、存在し、値が一致する場合 (ラムダに示されているように)からすべてusersAdのアイテムを返すようにするにはどうすればよいですか?usersWithSecurity

4

3 に答える 3

1

あなたの問題は.ToLower()、空の変数で実行しているときに確かに発生します。ループ内(あなたの場合、あなたの 内Where)に隠された文字列の割り当てを避けることをお勧めします。代わりに、を使用してString.Compare()ください。

コードを使用した例を次に示します。

var results = from usrAd in usersAd
      from usrRepo in usersWithSecurity.Where(x => string.Equals(usrAd.Value, x.Value, StringComparison.OrdinalIgnoreCase))
      select new User(userRepository)
      {
        ID = usrRepo == null ? null : usrRepo.ID,
        Value = usrAd.Value,
        FullName = usrAd.FullName
      };
于 2013-09-24T19:01:15.560 に答える