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 query = pets.AsQueryable().OrderBy(delegate(Pet pet) { if (pet.Name is DBNull) return null; return pet.Name; });

于 2013-07-30T06:26:33.847 回答