CSharp - 使用 Queryable.OrderBy 对值进行排序,使用引发异常

  显示原文与译文双语对照的内容
0 0

当我尝试使用 Queryable.OrderByDBNull 进行排序时,它抛出异常。

 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 函数中不添加条件检查来处理这里问题。

时间:原作者:8个回答

0 0

DBNull是旧数据技术的一部分。 Linq & EF不再需要 DBNull 。 仅使用空值。

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);
原作者:
0 0

我已经运行了代码并得到了一个例外:

At least one object must implement IComparable.

那是因为我不知道什么类型的名字。 我想不管它是什么它都没有实现 IComparable 。 你的CustomClass ( 。Name 上的类) 应该实现 IComparable<T> 接口,或者你应该在 OrderBy() 上传递一个 IComparer

原作者:
0 0

我使用下面的代码。 由于 Querable.OrderBy 在默认情况下不能使用 DBNull 。 我们必须使用 workaround 。 IEnumerable查询= pets.AsQueryable(). 顺序( 委托( 宠物宠物) ) { 如果( pet.name 是 DBNull ) 返回 null ;返回 pet.Name; });

原作者:
...