合并并排序 2 个表

本文关键字:个表 排序 合并 | 更新日期: 2023-09-27 18:31:01

我有2个数据表(在一个数据集中)

表 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 个表

首先,

我将使用具有相同列的匿名类型才能使用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); 

试试这个:

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