2009-06-04 31 views
1

私はLINQに精通していませんが、現在はASP.NETプロジェクトに取り組んでおり、LINQをSQLにORMとして使用しています(私はルートプランニングアプリケーションを構築しています)。私はそれが必要な方法でクエリを作成することに問題があるので、誰も私にこれを達成するためのヒントを与えることができます。現在のクエリは次のようになります。LINQクエリヘルプ(LINQ to SQL)

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 Orderを決定します。私のクエリは、順序と目的地(これまでクエリが行っているもの)に一致するルートが停止しているすべてのエレベーターと、出発地のストップが目的地のストップより低いOrder番号を持つ場所を選択する必要があります。 LINQでこれを行うことはできますか?それとも、結果をフィルタリングする必要がありますか?このような何かをしようと事前に

おかげで、 マティアス私の頭の上オフ

答えて

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; 
+0

作品を魔法のように、感謝:) – maff