[Bug] На Вложенных запросах
От: Holms США  
Дата: 14.04.10 06:39
Оценка:
C#
    public static EditableList<TimeLineRecord> GetRecords(IEnumerable<int> projectIds, DateTime dtStart, DateTime dtEnd)
    {
      using (var ctx = DB.DbContext)
      {
        var q = from project in ctx.Project
                orderby project.ProjectId
                join schedule in ctx.ProjectSchedule on project.ProjectId equals schedule.ProjectId into g
                from schedule in
                  (from gg in g
                   where gg.BudgetedStart.HasValue && gg.BudgetedStart >= dtStart &&
                         gg.BudgetedStart <= dtEnd &&
                         !string.IsNullOrEmpty(gg.PhaseName)
                   select gg)
                  .DefaultIfEmpty()
                select new
                         {
                           project.ProjectId,
                           project.Name,
                           PhaseName = schedule != null ? schedule.PhaseName : string.Empty,
                           PhaseStart = schedule != null ? schedule.BudgetedStart : null,
                           PhaseEnd = schedule != null ? schedule.BudgetedCompletion : null
                         };
        if (projectIds != null)
          q = q.Where(_ => projectIds.Contains(_.ProjectId));

        EditableList<TimeLineRecord> res = new EditableList<TimeLineRecord>();
        foreach (var data in q)
        {
          TimeLineRecord record = res.AddNew();
          record.ProjectId = data.ProjectId;
          record.ProjectName = data.Name;
          record.ProjectName = data.PhaseName;
          record.PhaseStartDate = data.PhaseStart;
          record.PhaseEndDate = data.PhaseEnd;
        }

        return res;
      }


генерит такой запрос
--  Sql MsSql2005
SELECT
    [project].[ProjectId],
    [project].[Name],
    CASE
        WHEN [t1].[Id] IS NOT NULL
            THEN [t1].[PhaseName]
        ELSE ''
    END as [c1],
    CASE
        WHEN [t1].[Id] IS NOT NULL
            THEN [t1].[BudgetedStart]
        ELSE NULL
    END as [c2],
    CASE
        WHEN [t1].[Id] IS NOT NULL
            THEN [t1].[BudgetedCompletion]
        ELSE NULL
    END as [c3]
FROM
    [Project] [project]
        LEFT JOIN [ProjectSchedule] [t1] ON [project].[ProjectId] = [t1].[ProjectId]
ORDER BY
    [project].[ProjectId]


Как видим условия из внутренего запроса игнорируются совсем.

И IT что-то в последнее время пропал.
Что делать?
... << RSDN@Home 1.2.0 alpha 4 rev. 1468>>
The life is relative and reversible.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.