我有一个表格数据如下:
CompanyName Amount Date
-------------------------------------
CompanyA 150.00 2013-01-02
CompanyB 40.00 2013-01-05
CompanyC 75.00 2013-02-02
CompanyA 250.00 2013-02-12
CompanyB 100.00 2013-03-27
CompanyC 350.00 2013-04-01
.
.
.
我需要建立一个包含日期范围和所选公司的报告如下:
Company Jan-13 Feb-13 Mar-13 Apr-13 May-13 ... Total
----------------------------------------------------------------
Company A $150 $239 $30 $500 $0 ... $1,809
Company B $80 $0 $150 $200 $0 ... $1,730
Company C $50 $30 $239 $0 $150 ... $2,033
Company D $600 $150 $80 $30 $25 ... $1,100
Company E $0 $50 $30 $150 $100 ... $1,080
.
.
.
.
MonthlyAmt $2,952 $1,377 $1,828 $2,470 $1,405 ... $25,608
请注意,Month列是动态的,具体取决于日期范围输入。
SQL或Linq可以像这样甜蜜地检索数据吗?
如果不能,我的粗略想法是先得到一行数据如下:
Company A Amount
-----------------
Jan-13 150
Feb-13 239
Mar-13 30
.
.
.
.
之后使用循环收集所有数据并将其放入ViewBag数组中。 然后在View Page中分配数据。 但如果是这样的话,就没有排序功能和页面列表功能。 我可以知道有什么更好的想法吗?或者这是限制。
非常感谢。
答案 0 :(得分:1)
在linqpad中检查完整示例(按日期过滤不在范围内) 如果当月没有交易,它不会为所有公司生成所有月份的记录。
void Main()
{
var transactions = new List<transaction>(){
new transaction() {
volume = 5,
company = "company1",
date = DateTime.Parse("2012.12.15")
},
new transaction() {
volume = 15,
company = "company1",
date = DateTime.Parse("2012.12.25")
},
new transaction() {
volume = 25,
company = "company2",
date = DateTime.Parse("2012.12.25")
},
new transaction() {
volume = 35,
company = "company2",
date = DateTime.Parse("2012.11.25")
},
new transaction() {
volume = 45,
company = "company3",
date = DateTime.Parse("2012.12.25")
},
};
transactions.Dump();
var allTransactionsViewModel = transactions
.GroupBy(t=>new {t.company,t.date.Month})
.GroupBy(g=>g.Key.company, g=>new{g.Key.Month ,Total= g.Sum(t=>t.volume)})
;
allTransactionsViewModel.Dump();
}
class transaction {
public int volume;
public string company;
public DateTime date;
}
所以你可以
table
@foreach(var g in allTransactionsViewModel){
tr
@foreach(var s in g){
td @s.total /td
}
/tr
/table