[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.
Re: [Bug] На Вложенных запросах
От: kkolyan  
Дата: 14.04.10 11:37
Оценка:
Здравствуйте, Holms, Вы писали:

H>И IT что-то в последнее время пропал.

H>Что делать?
юзать Linq2Sql
Re: [Bug] На Вложенных запросах
От: Зайцев Андрей Россия  
Дата: 14.04.10 19:37
Оценка:
Здравствуйте, Holms, Вы писали:

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


H>Что делать?


Чтобы решить проблему именно с этим запросом — можно перенести условия подзапроса внутрь join, тогда они будут учитываться.


        var q = from project in ctx.Project
                orderby project.ProjectId
                join schedule in ctx.ProjectSchedule.Where(gg => gg.BudgetedStart.HasValue && gg.BudgetedStart >= dtStart &&
                         gg.BudgetedStart <= dtEnd &&
                         !string.IsNullOrEmpty(gg.PhaseName)) on project.ProjectId equals schedule.ProjectId into g
                from schedule in g.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
                         };


А вот с багом генерации запроса — тут к авторам надо...
Re[2]: [Bug] На Вложенных запросах
От: Holms США  
Дата: 14.04.10 20:30
Оценка:
Здравствуйте, Зайцев Андрей, Вы писали:

ЗА>Чтобы решить проблему именно с этим запросом — можно перенести условия подзапроса внутрь join, тогда они будут учитываться.

Саму проблему я решил другим способом, жаль только что Toolkit на сработал как надо


ЗА>А вот с багом генерации запроса — тут к авторам надо...

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