私はしばらくの間、このクエリをリファクタリングしようとしましたが、うまくいきませんでした:
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 として記述しようとしましたが、どれも機能していません。繰り返し部分を再利用できるように、このクエリをリファクタリングする方法を教えてください。どうもありがとう。