1

私はしばらくの間、このクエリをリファクタリングしようとしましたが、うまくいきませんでした:

db.Kiosks.Where(kiosk => db.KioskDesignations.Where(
                 q =>
                 q.Kiosk.KioskId == kiosk.KioskId &&
                 (!q.RedesignedAt.HasValue||q.RedesignedAt.Value<= DateTime.Now))
                     .OrderByDescending(q => q.RedesignedAt)
                     .Take(1).Select(q => q.Type.DefinitionId).Contains(id)
                                   );

ここに問題があります。各キオスクには指定の履歴コレクションがあり、アプリケーションの一部では、最新の状態に基づいて何かを実行したいので (タイプまたはアクティビティまたはその他のデータをチェックすることによって)、クエリのこの部分が繰り返されます。 :

db.KioskDesignations.Where(q =>
          q.Kiosk.KioskId == kiosk.KioskId &&
          (!q.RedesignedAt.HasValue || q.RedesignedAt.Value <= DateTime.Now))
               .OrderByDescending(q => q.RedesignedAt).Take(1)

これまでのところ、この部分を function 、 Func 、および Expression として記述しようとしましたが、どれも機能していません。繰り返し部分を再利用できるように、このクエリをリファクタリングする方法を教えてください。どうもありがとう。

4

2 に答える 2