【发布时间】:2010-06-21 16:53:00
【问题描述】:
我有两个表,Tasks 和 TaskMilestones。我想要一个查询来为每个任务返回最近的过去里程碑和最近的未来 TaskMilestone。我正在使用 C#/LINQ-to-SQL。我该怎么做?
任务列:Id、TaskName TaskMilestones 列:Id、TaskId、MilestoneName、MilestoneDate
我想要一个包含以下行的返回表:TaskName、MilestoneDate、MilestoneName
我当前的解决方案导致 Linq 为每个任务查询一次数据库,这非常慢。
[编辑解决 cmets] 当前的实现很简单,不是一条语句,它只是查询任务列表,然后使用适当的 where 子句查询每个 TaskId 两次:
var x = from p in this.Database.Task
join pm in this.Database.TaskMilestones on p.Id equals pm.TaskId
select new
{
TaskId = p.Id,
TaskName = p.Name,
MilestoneName = m.Name,
MilestoneDate = pm.MilestoneDate,
};
foreach (var record in records)
{
var y = x.Where(p => p.TaskId == record.Id && p.MilestoneDate <= dt);
var z = x.Where(p => p.TaskId == record.Id && p.MilestoneDate > dt);
...
【问题讨论】:
-
也许将您当前的解决方案添加到帖子中?
-
+1,我也有兴趣查看您当前的 LINQ。
标签: sql linq linq-to-sql