c#按另一个列表的顺序进行数据处理

时间:2011-01-14 16:51:58

标签: c# datatable

我有一个字符串列表:

List<string> batchaddresses = new List<string>();

以下是它的内容:

17055
17064
18045
23564
11111
24200
    ...
    ...

我有一个如下所示的数据表:

Datatable dt = new Datatable();

这里是内容(有三列)

15 G231796 17024
2 G238540 17024
6 G238546 17024
12 G238547 17024
81 G238549 17024
9 BLANK0048 17024
12 BLANK0047 17024
34 BLANK0045 17024
43 BLANK0046 17024
63 BLANK0042 17024
78 BLANK0044 17024
85 BLANK0041 17024
96 BLANK0043 17024
46 AA102461 17025
19 AA10589 17025
86 AA10590 17025
22 AA10591 17025
43 AA19665 17025
44 AA19668 17025

我需要能够根据batchaddresses列表中的顺序对第三列对数据表进行排序

我该怎么做?非常感谢您的任何建议或指导

3 个答案:

答案 0 :(得分:6)

使用LINQ:

var query =
    from b in batchaddresses
    join r in myTable.AsEnumerable() on b equals r.Field<String>("ThirdColumn")
    select r;

var orderedTable = query.CopyToDataTable();

已添加:值得一提的是,CopyToDataTable方法仅适用于IEnumerable<DataRow>种类型。

已编辑:无需订单

答案 1 :(得分:0)

我没有测试这个解决方案,但是我会在dt中添加一个列,并用batchaddresses中每行第三列的位置填充它。然后,使用排序顺序参数中添加的行调用Select是一件简单的事。

答案 2 :(得分:0)

您可以利用Select的重载来获取每个项目的索引:

var table = batchaddresses.Select((xx,ii) => new { Value = xx, Order = ii })
                .Join(dataTable.AsEnumerable(),
                      (outer) => outer.Value,
                      (inner) => inner.Field<string>("ThirdColumn"),
                      (outer, inner) => new { Order = outer.Order, Row = inner })
                .OrderBy(xx => xx.Order)
                .Select(xx => xx.Row)
                .CopyToDataTable();