我有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};
但这不起作用。
答案 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);