我对Linq还不熟悉,如果您看到我真的不应该做的事情,请随时建议更改。
我正在开发一个新系统,允许警官注册加班。部分数据显示在地图上,并使用搜索条件过滤不需要的职位。为了使数据更易于处理,它被读入一个层次结构对象结构中,使用Linq。在这个例子中,一个工作可以包含多个班次,每个班次可以有多个可用职位。读取它们的Linq语句如下所示。
var jobs = (from j in db.Job
join s in db.Shift on j.Id equals s.JobId into shifts
select new JobSearchResult
{
JobNumber = j.Id,
Name = j.JobName,
Latitude = j.LocationLatitude,
Longitude = j.LocationLongitude,
Address = j.AddressLine1,
Shifts = (from shift in shifts
join p in db.Position on shift.Id equals p.ShiftId into positions
select new ShiftSearchResult
{
Id = shift.Id,
Title = shift.ShiftTitle,
StartTime = shift.StartTime,
EndTime = shift.EndTime,
Positions = (from position in positions
select new PositionSearchResult
{
Id = position.Id,
Status = position.Status
}).ToList()
}).ToList()
});
这段话的大意是:“那个方法可以正常运行并已经进行了测试。也许有更好的方法,如果你知道的话,可以自由发表建议。我的问题是:在查询创建之后,将会添加搜索条件。我知道我可以在创建查询时添加条件,但对于这个问题来说,在创建之后添加要更容易些。现在,我可以轻松地添加类似于以下内容的条件。”
jobs = jobs.Where(j => j.JobNumber == 1234);
然而,我遇到了如何处理班次或职位的困难。换句话说,我应该如何添加条件来表示班次在特定时间之后开始?以下是我想要实现但显然行不通的示例。
jobs = jobs.Shifts.Where(s = s.StartTime > JobSearch.StartTime) //JobSearch.StartTime is a form variable.
有人有什么建议吗?