【发布时间】:2018-08-20 13:07:00
【问题描述】:
我正在为 GroupBy 按月记录做很多不必要的工作。在数据库中,日期以varchar 格式保存,现在我无法更改格式,因为很多东西都依赖于它。以下是我的代码:
var Job_Progress_ViewModel = new List<MyViewModel>();
var Job_Ids = new List<int?>();
var Jobs = db.Jobs.Where(x.Date != null).ToList();
foreach (var job in Jobs)
{
int Year = Year_from_strDate(job.Date);
if (Year == 2018)
{
Job_Ids .Add(order.Id);
}
}
var JobProgress = db.JobProgress.Where(x => Job_Ids.Contains(x.JobId)).ToList();
foreach(var record in JobProgress)
{
var Model = new MyViewModel()
{
Month = Month_From_strDate(record.Job.Date),
Amount = record.total
};
Job_Progress_ViewModel.Add(Model);
}
在我看来:
foreach (var month in Model.Select(x=>x.Month).Distinct())
{
<tr>
<td>
@Model.Where(x => x.Month == month).Sum(x => x.Amount))
</td>
</tr>
}
我认为这不是好方法。然后我在互联网上搜索,并尝试了以下代码:
db.JobProgress.Where(x => Job_Ids.Contains(x.JobId))
.GroupBy(x => Month_From_strDate(x.Job.Date)
.Select(ln => new MyViewModel
{
Month = // How can I add month Here,
Amount = ln.Sum(r => r.total)
}).ToList();
我发现它更好的方法,但这里有两个问题:
- 我不知道如何获取月份,
- 而且我不能使用日期转换功能。我收到以下有效错误:
LINQ to Entities 无法识别方法 'System.String ToString()'
由于无法更改数据库中的日期格式,我该如何解决这个问题?
【问题讨论】:
-
varchar中的日期是什么格式? -
是
dd-mm-yyyy格式。
标签: asp.net-mvc entity-framework linq group-by