合并并排序2个表

时间:2013-09-12 13:56:16

标签: c# linq sorting dataset

我有2个DataTables(在DataSet中)

表1:

ID|ident  |Pos
------------------
0 | id425 | 0
1 | id123 | 3

表2:

ID|ident  |default|Pos
---------------------------
0 | id1   | 6     |2
1 | id180 | 6     |1

现在我想用LINQ进行排序,产生以下输出:

Result
ident|Pos
-------------
id425|0
id180|1
id1  |2
id123|3

现在我用LINQ来解决这个问题,用一个linq查询实现这个目的。我是LINQ的新手,所以我希望somone对我有一个暗示。我的问题是如何对两个表进行排序并合并结果。 到目前为止我的代码是:

var query =
from t1 in dataSet.Tables[tableOne].AsEnumerable()
from t2 in dataSet.Tables[tableTwo].AsEnumerable()
orderby t1[Pos]
orderby t2[Pos]
select new {t1,t2};

但这不起作用。

2 个答案:

答案 0 :(得分:3)

首先,我会使用具有相同列的匿名类型来使用Enumerable.Concat。然后它是一个简单的OrderBy

var t1Rows = dataSet.Tables[tableOne].AsEnumerable()
    .Select(r => new{ ident=r.Field<string>("ident"),Pos=r.Field<int>("Pos") });
var t2Rows = dataSet.Tables[tableTwo].AsEnumerable()
    .Select(r => new{ ident=r.Field<string>("ident"),Pos=r.Field<int>("Pos") }); 
var both = t1Rows.Concat(t2Rows);
var ordered = both.OrderBy(x => x.Pos);

在一个查询中相同(因为它是值得的,因Concat而无法实现纯查询语法):

var query = dataSet.Tables[tableOne].AsEnumerable()
    .Select(r => new { ident = r.Field<string>("ident"), Pos = r.Field<int>("Pos") })
    .Concat(dataSet.Tables[tableTwo].AsEnumerable()
    .Select(r => new { ident = r.Field<string>("ident"), Pos = r.Field<int>("Pos") }))
    .OrderBy(x => x.Pos); 

答案 1 :(得分:0)

试试这个:

var result_datatable1 = from o in table1
              select new
              {
                  o.ident,
                  o.Pos
              };
var result_datatable2 = from o in tabl2
              select new
              {
                  o.ident,
                  o.Pos
              };

var resultSum = result_datatable1.Concat(result_datatable2);