2

DBNullそれを使用して値をソートしようとすると、Queryable.OrderBy例外がスローされます。

    Pet[] pets =
        {
            new Pet {Name = "Barley", Age = 8},
            new Pet {Name = DBNull.Value, Age = 1},
            new Pet {Name = "Boots", Age = 4}
        };

    // Sort the Pet objects in the array by Pet.Name
    IEnumerable<Pet> query = pets.AsQueryable().OrderBy(pet => pet.Name);
    foreach (Pet pet in query)
        Console.WriteLine("{0} - {1}", pet.Name, pet.Age);

を使用しているため、以下のコードは例外をスローしDBNullます。以下のコードを使用してこの問題を解決できることはわかっていますが、

   IEnumerable<Pet> query = pets.AsQueryable().OrderBy(delegate(Pet pet)
            {
                if (pet.Name is DBNull)
                    return null;
                return pet.Name;
            });

しかし、私はこのコードを使用できません。OrderBy条件チェックイン機能を追加せずにこの問題を処理する方法はありますか。

4

3 に答える 3

2

DBNull は、古いデータ テクノロジの一部です。Linq と EF は DBNull を必要としなくなりました。代わりに null を使用してください。

Pet[] pets =
    {
        new Pet {Name = "Barley", Age = 8},
        //Using null is fine
        new Pet {Name = null, Age = 1}, 
        new Pet {Name = "Boots", Age = 4}
    };

// Sort the Pet objects in the array by Pet.Name
IEnumerable<Pet> query = pets.AsQueryable().OrderBy(pet => pet.Name);
foreach (Pet pet in query)
    Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
于 2013-07-30T08:24:58.747 に答える
0

私はコードを実行しましたが、例外が発生しました:

At least one object must implement IComparable.

それは、Name がどのような型なのかわからないからです。私はそれが何であれ、実装していないと推測していますIComparable。あなたCustomClass( のクラスName) はインターフェイスを実装するか、IComparable<T>に を渡す必要がありIComparerますOrderBy()

于 2013-07-24T06:15:22.390 に答える
0

以下のコードを使用しました。Querable.OrderBy はデフォルトでは DBNull では機能しません。回避策を使用する必要があります。IEnumerable クエリ = ペット.AsQueryable().OrderBy(delegate(ペット ペット) { if (pet.Name is DBNull) return null; return pet.Name; });

于 2013-07-30T06:26:33.847 に答える