請幫我幀的LINQ以下條件:使用行明智減法合併兩個表到一個
TBL 1:
ID | Total
1 20.00
2 90.00
3 130.00
TBL2:
ID | Total
1 10.00
2 30.00
差異表:(TBL1 -tbl2)
ID | Total
1 10.00
2 60.00
3 130.00
請讓我知道如何框架。
請幫我幀的LINQ以下條件:使用行明智減法合併兩個表到一個
TBL 1:
ID | Total
1 20.00
2 90.00
3 130.00
TBL2:
ID | Total
1 10.00
2 30.00
差異表:(TBL1 -tbl2)
ID | Total
1 10.00
2 60.00
3 130.00
請讓我知道如何框架。
在SQL的世界裏,你把TBL1和union all
TBL2與負總,那麼你group by
的id
求和值
var query = from x in tbl1.Concat(tbl2.Select(t => new { ID = t.ID, Total = -t.Total }))
group x by x.ID into x
select new
{
ID = x.Key,
Total = x.Sum(y => y.Total)
};
這基本上是一個完全外部連接,這可以表示爲聯盟一個左外連接和一個右外連接。
class DataModel
{
public int ID { get; set; }
public decimal Total { get; set; }
public override string ToString() { return string.Format("{0}:{1}", ID, Total); }
public override int GetHashCode() { return ID; }
public override bool Equals(object other)
{
DataModel otherModel = other as DataModel;
if (otherModel == null) return false;
return ID == otherModel.ID;
}
}
IEnumerable<DataModel> table1 = new List<DataModel> {
new DataModel { ID = 1, Total = 20m },
new DataModel { ID = 2, Total = 90m },
new DataModel { ID = 3, Total = 130m }
};
IEnumerable<DataModel> table2 = new List<DataModel> {
new DataModel { ID = 1, Total = 10m },
new DataModel { ID = 2, Total = 30m },
new DataModel { ID = 4, Total = 15m }
};
IEnumerable<DataModel> leftOuterJoin = from one in table1
join two in table2 on one.ID equals two.ID into temp
from right in temp.DefaultIfEmpty()
select new DataModel {
ID = one.ID,
Total = one.Total - (right == null ? 0m : right.Total)
};
IEnumerable<DataModel> rightOuterJoin = from two in table2
join one in table1 on two.ID equals one.ID into temp
from left in temp.DefaultIfEmpty()
select new DataModel {
ID = two.ID,
Total = (left == null ? 0m : left.Total) - two.Total
};
IEnumerable<DataModel> difference = leftOuterJoin.Union(rightOuterJoin);
foreach (DataModel item in difference)
{
Console.WriteLine(item);
}
控制檯輸出爲:
1:10
2:60
3:130
4:-15
非常感謝。這工作完美。我已經測試過它。 :) – rahulsen002 2014-10-20 20:41:45
請不要只問我們要解決的問題爲您服務。告訴我們你是如何試圖自己解決問題的,然後向我們展示結果是什麼,並告訴我們爲什麼你覺得它不起作用。請參閱「[您嘗試過什麼?](http://whathaveyoutried.com/)」,以獲得一篇您最近需要閱讀的優秀文章。 – 2014-10-20 19:50:29
這是一個左連接。 http://msdn.microsoft.com/en-us/library/bb397895.aspx – 2014-10-20 19:54:24
如果'tbl2'有一個'tbl1'沒有的ID? – Neolisk 2014-10-20 19:56:05