一个linq性能的有关问题
一个linq性能的问题
public IQueryable<StatisticsReimburseDTO> StatisticsReimburse(int userId,string projectCode,DateTime beginTime,DateTime endTime)
{
var query = (from g in wfEntities.dailyloglinedetail
where g.dailylogline.UserId == userId && g.dailylogline.ProjectCode == projectCode && g.dailylogline.DailyLogDate >= beginTime && g.dailylogline.DailyLogDate <= endTime && g.dailylogline.dailylogreceipt.DailyLogState == 2
group g by g.SubjectID into m
select new
{
SubjectId = m,
Amount = m.Sum(p => p.ActualAmount)
});
return (from g in query
select new StatisticsReimburseDTO
{
SubjectId = g.SubjectId.Key,
Amount = g.Amount
});
}
现在这块代码运行要两秒钟,有些慢。同志们觉得这个地方还有可以优化的地方吗?
------解决方案--------------------
直接看代码已经最简了。要想优化,需要看你的需求了。
------解决方案--------------------
------解决方案--------------------
group g by g.SubjectID into m
select new
{
SubjectId =
public IQueryable<StatisticsReimburseDTO> StatisticsReimburse(int userId,string projectCode,DateTime beginTime,DateTime endTime)
{
var query = (from g in wfEntities.dailyloglinedetail
where g.dailylogline.UserId == userId && g.dailylogline.ProjectCode == projectCode && g.dailylogline.DailyLogDate >= beginTime && g.dailylogline.DailyLogDate <= endTime && g.dailylogline.dailylogreceipt.DailyLogState == 2
group g by g.SubjectID into m
select new
{
SubjectId = m,
Amount = m.Sum(p => p.ActualAmount)
});
return (from g in query
select new StatisticsReimburseDTO
{
SubjectId = g.SubjectId.Key,
Amount = g.Amount
});
}
现在这块代码运行要两秒钟,有些慢。同志们觉得这个地方还有可以优化的地方吗?
------解决方案--------------------
直接看代码已经最简了。要想优化,需要看你的需求了。
------解决方案--------------------
public IQueryable<StatisticsReimburseDTO> StatisticsReimburse(int userId,string projectCode,DateTime beginTime,DateTime endTime)
{
var query = (from g in wfEntities.dailyloglinedetail
let p=g.dailylogline
where p.UserId == userId && p.ProjectCode == projectCode && p.DailyLogDate >= beginTime && p.DailyLogDate <= endTime && p.dailylogreceipt.DailyLogState == 2
group g by g.SubjectID into m
select new StatisticsReimburseDTO
{
SubjectId = m,
Amount = m.Sum(p => p.ActualAmount)
});
return query;
}
------解决方案--------------------
group g by g.SubjectID into m
select new
{
SubjectId =