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>>
Здравствуйте, Holms, Вы писали:
H>И IT что-то в последнее время пропал.
H>Что делать? 
юзать Linq2Sql
Здравствуйте, 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
};
А вот с багом генерации запроса — тут к авторам надо...
Здравствуйте, Зайцев Андрей, Вы писали:
ЗА>Чтобы решить проблему именно с этим запросом — можно перенести условия подзапроса внутрь join, тогда они будут учитываться.
Саму проблему я решил другим способом, жаль только что Toolkit на сработал как надо
ЗА>А вот с багом генерации запроса — тут к авторам надо...
кто автор я знаю, просто он в последние время игнорирует этот форум

... << RSDN@Home 1.2.0 alpha 4 rev. 1468>>