无法使用Orderby Linq c#对对象数组进行排序

时间:2014-03-04 13:24:27

标签: c# linq sorting

您好我正在尝试使用Linq orderby命令根据给定字段的值对对象数组进行排序。

这是我的代码:

LogDataPopulator[] arrLogPopulators = new LogDataPopulator[logCounter];
int counter = 0;
foreach (DateTime d in dtTimeVal)
{
    arrLogPopulators[counter] = new LogDataPopulator();
    arrLogPopulators[counter].messageDateTime = dtTimeVal[counter];
    arrLogPopulators[counter].messageContent = contentVal[counter];
    arrLogPopulators[counter].messagelevel = levelVal[counter];
    arrLogPopulators[counter].messagepublisher = publisherVal[counter];
    counter++;
}
LogDataPopulator[] sorted = new LogDataPopulator[logCounter];
sorted = arrLogPopulators.OrderBy(item => item.messageDateTime).ToArray();

但是我得到一个空引用异常错误

  

System.NullReferenceException未处理
  Message =对象引用未设置为对象的实例   源= McLogViewer

知道我应该如何使用OrderBy条款以及我做错了什么?

非常感谢任何帮助。此外,我可以通过将对象数组转换为字典来对对象数组进行排序,但这不符合我的目的,因为我试图在绑定到LogDataPopulator类的窗体格式视图中显示内容。

2 个答案:

答案 0 :(得分:1)

确保dtTimeVal的长度等于arrLogPopulators的长度。否则,您最终将会遇到未初始化的arrLogPopulators成员,当您尝试对其messageDateTime属性进行排序时,该成员将抛出NullReferenceException。

答案 1 :(得分:0)

它应该适用于这样的事情:

var sorted = (from d in dtTimeVal
    let arrLogPopulator = new LogDataPopulator(dtTimeVal[counter], contentVal[counter], 
                                  levelVal[counter], publisherVal[counter])
    orderby arrLogPopulator.messageDateTime
    select arrLogPopulator).ToArray()

使用LogDataPopulator类中的构造函数:

public LogDataPopulator(//some arguments...)
{
    this.messageDateTime = //arg1;
    this.messageContent = //arg2;
    this.messagelevel = //arg3;
    this.messagepublisher = //arg4;
    //others arguments...
}