在对象的子属性上执行OrderBy时出错

时间:2014-06-16 16:45:26

标签: c# asp.net-mvc linq asp.net-mvc-3 automapper

我在对象的子属性上执行OrderBy时遇到问题。

我有两个单独的模型,如下所示:

PersonModel:

public class PersonModel 
{
   public string Name { get; set;}
   public DeptModel Dept { get; set; }
}

DeptModel

public class DeptModel 
{
   public int DeptId { get; set;}
   public string DeptName { get; set;}
}

我曾使用automapper来映射这两个类之间的关系,我能够正确地检索数据。

检索数据后,我试图通过在DeptName对象上使用linq来实现顺序。然后它显示错误“对象引用未设置为对象的实例。”

结果是将数据检索为 IList< PersonModel> 。如果在此处调试,则此时显示正确的数据。

然后我在检索到的数据上执行OrderBy,它正在崩溃。

var tmp = result.OrderBy(x => x.Dept.DeptName)。ToList();

我不确定为什么会收到此错误。任何有关解决问题的建议都非常感谢。

1 个答案:

答案 0 :(得分:1)

您需要确保在默认比较中未使用null。这是一个简单的例子:

var tmp = result.OrderBy(x => ((x.Dept == null) || (x.Dept.Deptname == null)) ? "" : x.Dept.DeptName).ToList();

如果你想要一个非常好的解决方案,你应该实现自己的比较器在这里看到更多:

Use own IComparer<T> with Linq OrderBy