gpt4 book ai didi

c# - 将 where 子句添加到嵌套的 Linq 选择

转载 作者:行者123 更新时间:2023-11-30 18:08:26 25 4
gpt4 key购买 nike

我还是 Linq 的新手,所以如果您看到我确实不应该做的事情,请随时提出更改建议。

我正在开发一个新系统,允许官员报名加类。部分数据显示在 map 上,搜索条件过滤不需要的位置。为了使数据更易于使用,使用 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.

有人有什么建议吗?

最佳答案

第 1 步:创建关联,以便您可以将连接隐藏在 EntitySet 属性后面。 http://msdn.microsoft.com/en-us/library/bb629295.aspx

第 2 步:构建过滤器。您有 3 个可查询项和过滤器交互的可能性。首先指定最里面的过滤器,以便外部过滤器可以使用它们。

这里是所有职位(未过滤)。每个工作只有 3 个空缺职位的类次。每个类次都有这些空缺职位。

Expression<Func<Position, bool>> PositionFilterExpression =
p => p.Status == "Open";

Expression<Func<Shift, bool>> ShiftFilterExpression =
s => s.Positions.Where(PositionFilterExpression).Count == 3

Expression<Func<Job, bool>> JobFilterExpression =
j => true

第 3 步:将它们放在一起:

   List<JobSearchResult> jobs = db.Jobs
.Where(JobFilterExpression)
.Select(j => new JobSearchResult
{
JobNumber = j.Id,
Name = j.JobName,
Latitude = j.LocationLatitude,
Longitude = j.LocationLongitude,
Address = j.AddressLine1,
Shifts = j.Shifts
.Where(ShiftFilterExpression)
.Select(s => new ShiftSearchResult
{
Id = s.Id,
Title = s.ShiftTitle,
StartTime = s.StartTime,
EndTime = s.EndTime,
Positions = s.Positions
.Where(PositionFilterExpression)
.Select(p => new PositionSearchResult
{
Id = position.Id,
Status = position.Status
})
.ToList()
})
.ToList()
})
.ToList();

关于c# - 将 where 子句添加到嵌套的 Linq 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3150164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com