实体框架查询返回错误的结果

时间:2014-04-13 04:08:53

标签: c# linq entity-framework

我通常不会问自己的错误或问题,但现在我被卡住了。

我的问题是来自EF LinQ查询的结果。它应该工作,但事实并非如此。返回的数字是waaay out(如3.000.000%)

所以,把问题放在上下文中:假设你有一个组织,设计方向。每个人都朝着一个方向,被称为“资源”。

每个人都在“项目”上工作。

安抚是为了一个项目按间隔保存(例如:从第0天到第11天,它是1小时/天)

现在,我们希望所有资源(人员)按方向分组,并在一段时间内按总时间分组。

我的要求是:

var result = from r in com.Ressources
             where
             ids.Contains(r.Id)
             && (from p in r.Projects
                 where p.StartDate <= dates.To && p.EndDate >= dates.From
                 select p).Count() > 0
             group r by r.Direction into groups
             orderby groups.Key.DirectionName
             select new
             {
                 Id = groups.Key.Id,
                 DirectionName = groups.Key.DirectionName,
                 Responsable = groups.Key.Responsable.Prenom + " " + groups.Key.Responsable.Nom,
                 Ressources = from pr in groups
                              let totalpl = (double?)
                                            (from planif in pr.Planification
                                              let startOffset = JayaModelContainer.GetWorksDaysCount(planif.Project.StartDate, dates.From)
                                              let endOffset = JayaModelContainer.GetWorksDaysCount(planif.Project.StartDate, dates.To)
                                              where
                                              planif.FromProjectDay <= endOffset && planif.ToProjectDay >= startOffset
                                              let start = planif.FromProjectDay > startOffset ? startOffset : planif.FromProjectDay
                                              let end = planif.ToProjectDay <= endOffset ? endOffset : planif.ToProjectDay
                                              select (end - start + 1) * planif.Amount).Sum()
                              let totalrl = (double?)
                                            (from reel in com.RealTimes
                                              let startOffset = JayaModelContainer.GetWorksDaysCount(reel.Project.StartDate, dates.From)
                                              let endOffset = JayaModelContainer.GetWorksDaysCount(reel.Project.StartDate, dates.To)
                                              where reel.TimeSheet.Ressource.Id == pr.Id &&
                                                reel.FromProjectDay <= endOffset && reel.ToProjectDay >= startOffset
                                              let start = reel.FromProjectDay > startOffset ? startOffset : reel.FromProjectDay
                                              let end = reel.ToProjectDay <= endOffset ? endOffset : reel.ToProjectDay
                                              select (end - start + 1) * reel.Amount).Sum()           
                              orderby pr.Prenom, pr.Nom
                              select new
                              {
                                  Id = pr.Id,
                                  FirstName = pr.Prenom,
                                  LastName = pr.Nom,
                                  Occupation = pr.Occupation.Name,
                                  TotalPlanifs = totalpl,
                                  TotalReels = totalrl,
                                  PlannifCapacity = totalpl / maxCapacity,
                                  ReelCapacity = totalrl / maxCapacity
                              }
             };

但由于某种原因,返回的数字是等待的(例如每月9546%或147.000小时)

知道我的错误来自何处?

我认为它在查询中但找不到

谢谢

编辑:如果你想知道,(双?)是有原因的。如果表中没有记录,“sum”将崩溃,“Unable to cast”null“into double”。这个小技巧允许在空值上做所有表达式

EDIT2:已解决

发现我的错误!

这4个lignes中的反转值:

let start = planif.FromProjectDay > startOffset ? startOffset : planif.FromProjectDay
let end = planif.ToProjectDay <= endOffset ? endOffset : planif.ToProjectDay
let start = reel.FromProjectDay > startOffset ? startOffset : reel.FromProjectDay
let end = reel.ToProjectDay <= endOffset ? endOffset : reel.ToProjectDay

这些行应该是:

let start = planif.FromProjectDay > startOffset ? planif.FromProjectDay : startOffset
let end = planif.ToProjectDay <= endOffset ? planif.ToProjectDay : endOffset
let start = reel.FromProjectDay > startOffset ? reel.FromProjectDay : startOffset
let end = reel.ToProjectDay <= endOffset ? reel.ToProjectDay : endOffset

现在完美运作!

0 个答案:

没有答案
相关问题