使用字段子串将Linq到DataSet的DataTable排序

时间:2011-10-26 15:18:08

标签: .net linq linq-to-dataset

我想使用两个排序值为Linq to DataSet订购DataTable。然而,这两个值来自拆分和解析相同的字段(不要问我原因!)。

我试着这样做:

var query = from row in dtReports.AsEnumerable()
            orderby row.Field<string>("ReportNumber").Substring(0,4),
                int.Parse(row.Field<string>("ReportNumber").Substring(5))
            select row

DataTable dt = query.AsDataView().ToTable()

但我得到“使用投影后无法创建DataView”。

然后我也尝试了:

var query = from element in (
                from row in dtReports.AsEnumerable()
                let year = row.Field<string>("ReportNumber").Substring(0, 4)
                let num = int.Parse(row.Field<string>("ReportNumber").Substring(5))
                select row, year, num)
            orderby element.year, element.num
            select element.row

DataTable dt = query.AsDataView().ToTable()

我一直得到同样的错误。

怎么可以这样做?


我想感谢大家的答案。最终的解决方案非常简单:

var query = from row in dtReports.AsEnumerable()
            let year = row.Field<string>("ReportNumber").Substring(0, 4)
            let num = int.Parse(row.Field<string>("ReportNumber").Substring(5))
            orderby year, num
            select row

DataTable dt = query.CopyToDataTable()

3 个答案:

答案 0 :(得分:3)

var query = dtReports.AsEnumerable()
              .OrderBy(x => x.Field<string>("ReportNumber").Substring(0, 4))
              .ThenBy(x => x.Field<string>("ReportNumber").Substring(5));
var dt = query.CopyToDataTable<DataRow>();

答案 1 :(得分:2)

您可以使用CopyToDataTable

DataTable dt = query.CopyToTable()

答案 2 :(得分:0)

看看这个, http://msdn.microsoft.com/en-us/library/bb386921.aspx 希望这是你在找什么?