1
私は、すべての店舗の記録とその開店時間と閉店時間を含むデータベースを持っています。現在、データベース内の各店舗について、これらの時刻を抽出するlinqクエリがあります。以下のコードされていますLinqクエリの簡略化/カプセル化
StoresDatabaseDataContext db = new StoresDatabaseDataContext();
var serverData = from c in db.Stores
where c.storeID == currentStore.id
select new
{
openTime = c.SundayOpen,
closeTime = c.SundayOpen < c.SundayClose ? c.SundayClose : c.MondayClose,
timeZone = c.TimeZone,
hasDaylightSavings = c.DaylightSavings
};
switch (weekDay)
{
case DayOfWeek.Monday:
serverData= from c in db.Stores
where c.storeID == currentStore.id
select new
{
openTime = c.MondayOpen,
closeTime = c.MondayOpen < c.MondayClose ? c.MondayClose : c.TuesdayClose,
timeZone = c.TimeZone,
hasDaylightSavings = c.DaylightSavings
};
break;
case DayOfWeek.Tuesday:
serverData = from c in db.Stores
where c.storeID == currentStore.id
select new
{
openTime = c.TuesdayOpen,
closeTime = c.TuesdayOpen < c.TuesdayClose ? c.TuesdayClose : c.WednesdayClose,
timeZone = c.TimeZone,
hasDaylightSavings = c.DaylightSavings
};
break;
//...
}
これが正しく実行されるには、しかし、重複コードがたくさんある、と私はどちらかのカプセル化または他のいくつかの方法論を介してこれを削減したいと思います。 1つの簡単なアプローチは、スイッチステートメントの複雑さを軽減することです:
serverData = from c in db.Accounts
where c.storeID == currentStore.id
select new
{
switch (weekDay)
{
case DayOfWeek.Monday:
openTime = c.MondayOpen;
closeTime = c.MondayOpen < c.MondayClose ? c.MondayClose : c.TuesdayClose;
break;
case DayOfWeek.Tuesday:
openTime = c.TuesdayOpen;
closeTime = c.TuesdayOpen < c.TuesdayClose ? c.TuesdayClose : c.WednesdayClose;
break;
//....
},
timeZone = c.TimeZone,
hasDaylightSavings = c.DaylightSavings
};
しかし、私はどのようにきれいにこのように時間を抽出するか分からない。すべてのアドバイスをいただければ幸いです。