当我尝试使用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
函数中添加条件检查。
答案 0 :(得分:2)
DBNull是旧数据技术的一部分。 Linq&amp; 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);
答案 1 :(得分:0)
我已经运行了代码并获得了一个例外:
At least one object must implement IComparable.
那是因为我不知道Name是什么类型。我猜它是什么,它没有实现IComparable
。您的CustomClass
(Name
上的课程)应该实施IComparable<T>
界面,或者您应该在IComparer
上传递OrderBy()
。
答案 2 :(得分:0)
我使用了以下代码。由于Querable.OrderBy默认情况下不能与DBNull一起使用。我们必须使用变通方法。 IEnumerable query = pets.AsQueryable()。OrderBy(delegate(Pet pet){if(pet.Name is DBNull)return null; return pet.Name;});