这是我的表结构:
而且我必须生成以下 JSON:
{
Name: "AccCat1",
Credit: 123,
Debit: 123,
AccountGroups:[
{
Name: "AccGrp1",
Credit: 123,
Debit: 123,
Accounts: [
{
Name: "Acc1",
Credit: 123,
Debit: 123,
AccountParticulars:[
{
Name: "AccPar1",
Credit: 123,
Debit: 123
},
{
Name: "AccPar2",
Credit: 123,
Debit: 123
}
]
}
]
}
]
}
我必须从 JournalRecord 开始,并在链上向上创建 JSON 输出。到目前为止,这是我可以收集到的,但可以看出,这并不是因为我一直在对 Credit 和 Debit 值求和,所以它是相同的,而不是相应的:
var records = db.JournalEntries.Include(je => je.JournalRecords.Select(jr => jr.Account).Select(j => j.AccountParticulars))
.Where(je => je.Date >= from && je.Date <= to)
.SelectMany(s => s.JournalRecords)
.GroupBy(d => d.AccountParticular.Account.AccountGroup.AccountCategory)
.Select(g => new
{
Name = g.Key.Name,
Credit = g.Sum(c => c.Credit),
Debit = g.Sum(d => d.Debit),
AccountGroups = g.Key.AccountGroups.Select(ag => new
{
Name = ag.Name,
Credit = g.Sum(c => c.Credit),
Debit = g.Sum(d => d.Debit),
Accounts = ag.Accounts.Select(ac => new
{
Name = ac.Name,
Credit = g.Sum(c => c.Credit),
Debit = g.Sum(d => d.Debit),
AccountParticulars = ac.AccountParticulars.Select(ap => new
{
Name = ap.Name,
Credit = g.Sum(c => c.Credit),
Debit = g.Sum(d => d.Debit)
})
})
})
});
这是我的代码产生的结果:
[
{
"Name": "Cat1",
"Credit": 11000, <--Total (correct)
"Debit": 11000, <--Total (correct)
"AccountGroups": [
{
"Name": "Grp1",
"Credit": 11000, <--Total (correct)
"Debit": 11000, <--Total (correct)
"Accounts": [
{
"Name": "Acc1",
"Credit": 11000, <--Total (correct)
"Debit": 11000, <--Total (correct)
"AccountParticulars": [
{
"Name": "AccPar1",
"Credit": 11000, <-- Should be 500. From JournalRecord
"Debit": 11000 <-- Should be 500. From JournalRecord
},
{
"Name": "AccPar2",
"Credit": 11000, <-- Should be 500. From JournalRecord
"Debit": 11000 <-- Should be 500. From JournalRecord
},
{
"Name": "Accpar3",
"Credit": 11000, <-- Should be 10000. From JournalRecord
"Debit": 11000 <-- Should be 10000. From JournalRecord
}
]
}
]
}
]
}
]
这对我来说是时间敏感的,所以任何对正确方向的帮助都会有所帮助。
最佳答案
var records = db.JournalEntries.Include(je => je.JournalRecords.Select(jr => jr.Account).Select(j => j.AccountParticulars))
.Where(je => je.Date >= from && je.Date <= to)
.SelectMany(s => s.JournalRecords)
.GroupBy(d => d.AccountParticular.Account.AccountGroup.AccountCategory)
.Select(g => new
{
Name = g.Key.Name,
Credit = g.Sum(c => c.Credit),
Debit = g.Sum(d => d.Debit),
AccountGroups = g.Key.AccountGroups.Select(ag => new
{
Name = ag.Name,
Credit = ag.Sum(c => c.Credit), <--- CHANGED
Debit = ag.Sum(d => d.Debit), <--- CHANGED
Accounts = ag.Accounts.Select(ac => new
{
Name = ac.Name,
Credit = ac.Sum(c => c.Credit), <--- CHANGED
Debit = ac.Sum(d => d.Debit), <--- CHANGED
AccountParticulars = ac.AccountParticulars.Select(ap => new
{
Name = ap.Name,
Credit = ap.Sum(c => c.Credit), <--- CHANGED
Debit = ap.Sum(d => d.Debit) <--- CHANGED
})
})
})
});
关于c# - 使用 LINQ 创建 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28843305/