2011-01-14 49 views
0

我有一个字符串列表: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列表顺序

如何将我做到这一点?非常感谢你的任何建议或指导

+0

@anthony你为什么要删除夜回答? – 2011-01-14 17:15:31

回答

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>类型可用。

编辑:没有排序依据需要

0

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

+0

非常感谢你能告诉我你将如何编码选择? – 2011-01-14 17:02:49

+0

plus - 这部分很难做,我会给dt添加一列,并用batchaddresses中每行第三列的位置填充它。 – 2011-01-14 17:03:48

0

你可以利用选择的超载来获得每个项目的指数:

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();