2
A
回答
1
我已經採取了一種模擬數據的方法,因爲它們可能已經通過某些ORM實現了數據庫,即包含數據和子集合的類。再加上一些「商業邏輯」來計算所需的數字。所以你可以選擇一種數據庫方式以及內存方式。
在Linqpad:
void Main()
{
var data = new[]
{
new Record { Id = 1, ParentId = null, Qty = 1, Cost = 0.0m },
new Record { Id = 2, ParentId = 1, Qty = 2, Cost = 0.0m },
new Record { Id = 3, ParentId = 1, Qty = 3, Cost = 0.0m },
new Record { Id = 4, ParentId = 2, Qty = 4, Cost = 0.0m },
new Record { Id = 5, ParentId = 3, Qty = 5, Cost = 0.0m },
new Record { Id = 6, ParentId = 2, Qty = 6, Cost = 1.7m },
new Record { Id = 7, ParentId = 4, Qty = 7, Cost = 1.8m },
new Record { Id = 8, ParentId = 5, Qty = 8, Cost = 1.9m },
new Record { Id = 9, ParentId = 5, Qty = 9, Cost = 2.0m },
}.ToList();
// Mimic ORM's job:
data.ForEach(d => d.ChildRecords =
data.Where(c => c.ParentId == d.Id).ToList());
data.Select(d => new { d.Id, d.Cost, d.TotalCost }).Dump();
}
class Record
{
public int Id { get; set; }
public int? ParentId { get; set; }
public int Qty { get; set; }
private decimal _cost = 0m;
public decimal Cost
{
get { return this._cost + this.ChildRecords.Sum(cr => cr.TotalCost); }
set { this._cost = value; }
}
public decimal TotalCost
{
get { return this.Qty * this.Cost; }
}
public ICollection<Record> ChildRecords;
}
結果:
Id Cost TotalCost
1 619.2 619.2
2 60.6 121.2
3 166 498
4 12.6 50.4
5 33.2 166
6 1.7 10.2
7 1.8 12.6
8 1.9 15.2
9 2 18
的優化可以應用一些記憶化,即讓成本屬性存儲在它的私有成員變量的getter的結果。
相關問題
- 1. 數據庫表關係的設計
- 2. MySQL數據庫設計 - 關係表
- 3. 根據Laravel 5中的子關係計數排序數據
- 4. 數據關係谷歌電子表格
- 5. 關係中的核心數據總和
- 6. 關係數據庫設計
- 7. 計數關係錶行
- 8. 子集總和的方法總數的復發關係
- 9. 關係數據庫中的行計數
- 10. 我應該在主關係表中添加總計數
- 11. 子列或多對多關係的數據庫設計
- 12. 關係數據庫設計(MySQL的)
- 13. 關係數據庫設計(MySQL的)
- 14. 數據庫架構設計的關係
- 15. 核心數據:計數跨越關係
- 16. WCF數據表關係
- 17. 複製關係表數據
- 18. Asp.net數據庫表關係
- 19. laravel數據表關係
- 20. 關係數據庫表
- 21. 獲取關係表數據
- 22. 數據庫表關係
- 23. MySQL數據庫表關係
- 24. 總計在數據表中的列中
- 25. 用CoreData關係計算彙總
- 26. 關於彙總數據的dc.js表
- 27. 3個表的數據庫設計中的循環關係
- 28. 好友列表:關係數據庫表設計
- 29. Parse.com關係計數
- 30. Tekerik RadGrid子數據的總和表達
您正在使用哪些DBMS?語法各不相同,特別是對於像這樣的更高級的查詢。 – McGarnagle 2012-04-01 03:12:01
我想在數據表中做一些這樣的數據,而不是在數據庫中。 – trailerman 2012-04-01 03:36:38
爲你的問題添加正確的標籤,是不是關於C#和LINQ而不是SQL? – arturro 2012-04-01 04:15:17