我有一个ADO.Net数据表,我需要首先按列1然后按列2排序,其中任何一个都可能有空值。一旦排序,我需要从行中读取一些值并添加到列表视图中。如何将DataTable按2列进行排序,使用NULL,可能使用LINQ?
我已经编写代码来完成这个DataTable.DefaultView.Sort(运行两次)。但想知道是否有更好的方法。
我想也许LINQ ......所以我尝试:
OrderedEnumerableRowCollection<DataRow> queryX = dt.AsEnumerable()
.OrderBy(c => c.Field<int?>("column1"))
.ThenBy(c => c.Field<int?>("column2"));
但随着"System.InvalidCastException was unhandled"
这样的错误。我认为这是由NULL引起的,所以就像我在数据表"where column1 IS NOT NULL"
上指定一个查询的测试一样,并且错误仍然发生。
我真的没有太多的经验LINQ所以我的问题是:
- 什么是不正确上面我的代码?从概念上讲,我错过了LINQ如何工作?
- 为什么过滤掉空值仍然会导致这种情况?再一次,从概念上说,我错过了LINQ的工作原理
- 有没有更好的\正确的LINQ查询呢?
- 是否有更好的\正确(更优雅)的方式来做到这一点(使用LINQ或不)?
TEP
你列1或列2不是int ? ...必须是问题,因为如果我的DataTable具有正确的类型,那么您的查询没有问题。请注意,你的列类型应该是int,而不是int?在列定义中,但应该是int?当您使用字段属性访问时,就像您一样。 –
2009-11-02 21:03:26