我有以下兩個示例資料表,它們顯示了從資料庫加載的資料:
table1: table2:
| pk |groupID|cField|field1|field2| | pk |groupID|cField|field1|field2|
|----|-------|------|------|------| |----|-------|------|------|------|
| 1 | 1 | 0.5 | 10 | $5 | | 10 | 1 | 0.5 | 20 | $10 |
| 2 | 1 | 1 | 10 | $10 | | 11 | 1 | 1 | 20 | $20 |
| 3 | 1 | 2 | 10 | $20 | | 12 | 1 | 2 | 20 | $40 |
| 4 | 1 | 5 | 10 | $50 | | 13 | 1 | 5 | 20 | $100 |
The expected result would be (dtAux):
|groupID|cField|t1_field1|t1_field2|t2_field1|t2_field2|
|-------|------|---------|---------|---------|---------|
| 1 | 0.5 | 10 | $5 | 20 | $10 |
| 1 | 1 | 10 | $10 | 20 | $20 |
| 1 | 2 | 10 | $20 | 20 | $40 |
| 1 | 5 | 10 | $50 | 20 | $100 |
基于this other post,我嘗試了以下代碼:
dtAux = new DataTable();
dtAux.Columns.Add("groupID");
dtAux.Columns.Add("cField");
dtAux.Columns.Add("t1_field1");
dtAux.Columns.Add("t1_field2");
dtAux.Columns.Add("t2_field1");
dtAux.Columns.Add("t2_field2");
IEnumerable<DataRow> qry = from t1 in table1.AsEnumerable() join t2 in table2.AsEnumerable()
on t1.Field<float>("cField") equals t2.Field<float>("cField")
where t1.Field<int>("groupID") == 1
select dtAux.LoadDataRow(new Object[] {
t1.Field<int>("groupID"), t1.Field<float>("cField"),
t1.Field<int>("field1"), t1.Field<decimal>("field2"),
t2.Field<int>("field1"), t2.Field<decimal>("field2")
}, false);
然而,它回傳一個空表。非常感謝任何提示或幫助。
uj5u.com熱心網友回復:
你可以試試 Zip。
var table1 = new [] {
new { pk = 1, groupID = 1, field2 = 5 },
new { pk = 2, groupID = 1, field2 = 10 }
};
var table2 = new [] {
new { pk = 10, groupID = 1, field2 = 10 },
new { pk = 11, groupID = 1, field2 = 20 }
};
var table3 = table1.Zip(
second: table2,
resultSelector: (t1, t2) => new { t1_field2 = t1.field2, t2_field2 = t2.field2});
foreach(var t3 in table3 )
{
Console.WriteLine($"{t3.t1_field2}, {t3.t2_field2}");
}
這列印:
5, 10
10, 20
uj5u.com熱心網友回復:
qry不執行。你需要.CopyToDataTable()執行它。
qry.CopyToDataTable();
示例程式
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438269.html
上一篇:c#-從嵌套串列中查找字串
下一篇:根據序列號回傳最近的記錄
