我对LINQ并不熟悉,但我目前正在开发一个ASP.NET项目并使用LINQ to SQL作为ORM(我正在构建一个路由规划应用程序)。我有一个问题以我需要的方式创建查询,所以也许任何人都可以给我一个提示如何实现这一点。我当前的查询如下所示:
var results = from lift in db.Lift
where lift.StartTime > DateTime.Now
&& lift.Route.Stop.Any(o => o.Location.Name.ToLower().Contains(origin))
&& lift.Route.Stop.Any(d => d.Location.Name.ToLower().Contains(destination))
select lift;
此查询可以正常工作。我需要的扩展如下:每个Stop都有一个名为Order的字段,用于确定特定Route中的Stop顺序。我的查询应该选择所有提升路线具有匹配顺序和目的地的停靠点(这是查询到目前为止所做的)以及原点停止具有比目标停止更低的订单号。我可以使用LINQ执行此操作,还是必须在之后过滤结果?
提前致谢, 的Mathias
答案 0 :(得分:2)
脱离我的脑海......尝试这样的事情(可能会简化):
var results = from lift in db.Lift
let originStop = lift.Route.Stop.
FirstOrDefault(o => o.Location.Name.ToLower().Contains(origin))
let destinationStop = lift.Route.Stop.
FirstOrDefault(d => d.Location.Name.ToLower().Contains(destination))
where lift.StartTime > DateTime.Now
&& originStop != null
&& destinationStop != null
&& originStop.OrderNumber < destinationStop.OrderNumber
select lift;