選択肢の組み合わせがあり、選択した内容に基づいてデータをフィルタリングする必要があります(この場合はEFを使用します)。すべての組み合わせをリストするのではなく、次のような記述を書く方がクリーンですか?クエリの組み合わせを組み合わせるためのLinq構文
私の最初の試みは、特に組み合わせがさらに大きくなると、あまりにも複雑に思えます。
DateTime today = DateTime.Now.Date;
DateTime yesterday = today.AddDays(-1);
DateTime tomorrow = today.AddDays(1);
var query = db.Products.AsQueryable();
if (userSettings.DisplayYesterday && userSettings.DisplayToday && userSettings.DisplayTomorrow)
{
query = query.Where(x => DbFunctions.TruncateTime(x.ListedTime) == yesterday || DbFunctions.TruncateTime(x.ListedTime) == today || DbFunctions.TruncateTime(x.ListedTime) == tomorrow);
}
else if (!userSettings.DisplayYesterday && userSettings.DisplayToday && userSettings.DisplayTomorrow)
{
query = query.Where(x => DbFunctions.TruncateTime(x.ListedTime) == today || DbFunctions.TruncateTime(x.ListedTime) == tomorrow);
}
else if (userSettings.DisplayYesterday && !userSettings.DisplayToday && userSettings.DisplayTomorrow)
{
query = query.Where(x => DbFunctions.TruncateTime(x.ListedTime) == yesterday || DbFunctions.TruncateTime(x.ListedTime) == tomorrow);
}
else if (userSettings.DisplayYesterday && userSettings.DisplayToday && !userSettings.DisplayTomorrow)
{
query = query.Where(x => DbFunctions.TruncateTime(x.ListedTime) == yesterday || DbFunctions.TruncateTime(x.ListedTime) == today);
}
else if (!userSettings.DisplayYesterday && !userSettings.DisplayToday && userSettings.DisplayTomorrow)
{
query = query.Where(x => DbFunctions.TruncateTime(x.ListedTime) == tomorrow);
}
else if (!userSettings.DisplayYesterday && userSettings.DisplayToday && !userSettings.DisplayTomorrow)
{
query = query.Where(x => DbFunctions.TruncateTime(x.ListedTime) == today);
}
else if (userSettings.DisplayYesterday && !userSettings.DisplayToday && !userSettings.DisplayTomorrow)
{
query = query.Where(x => DbFunctions.TruncateTime(x.ListedTime) == yesterday);
}
else if (userSettings.DisplayYesterday && !userSettings.DisplayToday && !userSettings.DisplayTomorrow)
{
query = query.Where(x => DbFunctions.TruncateTime(x.ListedTime) == yesterday);
}
else if (!userSettings.DisplayYesterday && !userSettings.DisplayToday && !userSettings.DisplayTomorrow)
{
// If nothing is selected then default to today
query = query.Where(x => DbFunctions.TruncateTime(x.ListedTime) == today);
}
List<Products> productList = await query.ToListAsync();
優れています。これは非常にクリーンです。ありがとうございました。 – pathDongle
@pathDongle私は、この部分的な日付のケースについて、より良い解決策を少しは答えて更新しました(私はそう思います)。 – Evk
ありがとう、私は特に日付のソリューションを探していなかった、それはちょうど組み合わせだった。私はかなり日付について自信を持って、DateTime.Nowがこの状況で正しいことを知っています。再度、感謝します。 – pathDongle