0

我有 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 的新手,所以我希望有人能给我一些提示。我的问题是如何对这两个表进行排序并组合结果。到目前为止,我的代码是:

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

但这不起作用。

4

2 回答 2

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); 
于 2013-09-12T14:01:25.793 回答
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);
于 2013-09-12T14:03:05.653 回答