C# 如何使用LINQ按2列对数据表进行排序,并使用空值?
我有一个ADO.NetC# 如何使用LINQ按2列对数据表进行排序,并使用空值?,c#,linq,C#,Linq,我有一个ADO.Netdatatable,我需要先按column1排序,然后按column2排序,其中任何一个都可能有空值。排序后,我需要从行中读取一些值并添加到listview 我已经编写了执行此DataTable.DefaultView.Sort(运行两次)的代码。但是想知道是否有更好的方法 我在想也许LINQ…所以我试着: OrderedEnumerableRowCollection<DataRow> queryX = dt.AsEnumerable()
datatable
,我需要先按column1排序,然后按column2排序,其中任何一个都可能有空值。排序后,我需要从行中读取一些值并添加到listview
我已经编写了执行此DataTable.DefaultView.Sort(运行两次)的代码。但是想知道是否有更好的方法
我在想也许LINQ…所以我试着:
OrderedEnumerableRowCollection<DataRow> queryX = dt.AsEnumerable()
.OrderBy(c => c.Field<int?>("column1"))
.ThenBy(c => c.Field<int?>("column2"));
OrderedEnumerablerRowCollection queryX=dt.AsEnumerable()
.OrderBy(c=>c.Field(“column1”))
.ThenBy(c=>c.Field(“column2”);
但是,“System.InvalidCastException”的此错误未得到处理“
。我假设这是由空值引起的,所以作为一个测试,我在datatable“where column1 NOT NULL”
上指定了一个查询,错误仍然发生
我没有太多LINQ经验,所以我的问题是:
- 我上面的代码有什么错误?从概念上讲,我缺少一些关于LINQ如何工作的信息
- 为什么过滤掉空值仍然会导致这种情况?再一次,从概念上讲,我遗漏了一些关于LINQ如何工作的内容
- 是否有更好的\正确的LINQ查询可以解决此问题
- 是否有更好\正确(更优雅)的方法(使用LINQ或不使用LINQ)
tep如果您有一个数据表,请查看: 资料来源:
如果您有数据表,请查看: 资料来源:
不确定这些列的数据类型是什么,我假设它们是int 但如果您的数据库是Oracle,请尝试以下操作:
OrderedEnumerableRowCollection<DataRow> queryX = dt.AsEnumerable()
.OrderBy(c => c.Field<decimal?>("column1"))
.ThenBy(c => c.Field<decimal?>("column2"));
OrderedEnumerablerRowCollection queryX=dt.AsEnumerable()
.OrderBy(c=>c.Fielddecimal?(“第1列”))
.ThenBy(c=>c.Fielddecimal?(“第2列”);
不确定这些列的数据类型是什么,我假设它们是int
但如果您的数据库是Oracle,请尝试以下操作:
OrderedEnumerableRowCollection<DataRow> queryX = dt.AsEnumerable()
.OrderBy(c => c.Field<decimal?>("column1"))
.ThenBy(c => c.Field<decimal?>("column2"));
OrderedEnumerablerRowCollection queryX=dt.AsEnumerable()
.OrderBy(c=>c.Fielddecimal?(“第1列”))
.ThenBy(c=>c.Fielddecimal?(“第2列”);
与此相关的两个问题……1)当我这样做时,我会说“column1 asc,column2 asc”,我希望排序是按column1然后按column2,但似乎是相反的。这是预期的吗?2) 有没有一种简单的方法来处理这两列中的NULL?(可能这只是另一个StackOverflow问题)两个与此相关的问题…1)当我这样做时,我会说“column1 asc,column2 asc”,我希望排序是按column1然后按column2,但似乎是另一种方式。这是预期的吗?2) 有没有一种简单的方法来处理这两列中的NULL?(可能这只是另一个StackOverflow问题)您的column1或column2不是int。。。这一定是问题所在,因为如果我的DataTable的类型正确,我对您的查询没有问题。请注意,列类型应该是int,而不是int?在列定义中,但应为int?当您使用Field属性进行访问时,您的column1或column2不是int。。。这一定是问题所在,因为如果我的DataTable的类型正确,我对您的查询没有问题。请注意,列类型应该是int,而不是int?在列定义中,但应为int?当您使用字段属性进行访问时,正如您所做的那样。