0

次のクエリがあります。

private IEnumerable<EventSchedule> GetTodaySchedules(string tab)
{
    var today = DateTime.Now.Date;

    var result = Database.EventSchedules.Where(s => 
    s.RecurrenceStart.Value.Date <= today && 
    s.RecurrenceStart.Value.TimeOfDay > today.TimeOfDay &&
    s.RecurrenceEnd.Value.Date >= today &&
    s.BaseEvent.EndShow > DateTime.Now &&
    s.BaseEvent.IsApproved.Value && !s.IsRemoved.Value &&
    s.BaseEvent.EventsCategories.Any(c => c.EventCategory.Name == tab)).ToList();
}

このクエリは、EventScheduleテーブルから今日のイベントを選択します。問題は、時々tab空で、このクエリはレコードを返さないことです。私はそのようなものを書くことができます:

private IEnumerable<EventSchedule> GetTodaySchedules(string tab)
    {
        var today = DateTime.Now.Date;
        if(string.IsNullOrWhiteSpace(tab))
        {
             var result = Database.EventSchedules.Where(s => 
             s.RecurrenceStart.Value.Date <= today && 
             s.RecurrenceStart.Value.TimeOfDay > today.TimeOfDay &&
             s.RecurrenceEnd.Value.Date >= today &&
             s.BaseEvent.EndShow > DateTime.Now &&
             s.BaseEvent.IsApproved.Value && !s.IsRemoved.Value).ToList();
        {
        else
        {
             var result = Database.EventSchedules.Where(s => 
             s.RecurrenceStart.Value.Date <= today && 
             s.RecurrenceStart.Value.TimeOfDay > today.TimeOfDay &&
             s.RecurrenceEnd.Value.Date >= today &&
             s.BaseEvent.EndShow > DateTime.Now &&
             s.BaseEvent.IsApproved.Value && !s.IsRemoved.Value &&
             s.BaseEvent.EventsCategories.Any(c => c.EventCategory.Name == tab)).ToList();
        }

    }

しかし、それは醜いです。他の方法はありますか?
ありがとう。

4

2 に答える 2

2

これはどうですか...ヘンリックが示したような三項演算子も可能です...

private IEnumerable<EventSchedule> GetTodaySchedules(string tab)
{
     var today = DateTime.Now.Date;
     var result = Database.EventSchedules.Where(s => 
     s.RecurrenceStart.Value.Date <= today && 
     s.RecurrenceStart.Value.TimeOfDay > today.TimeOfDay &&
     s.RecurrenceEnd.Value.Date >= today &&
     s.BaseEvent.EndShow > DateTime.Now &&
     s.BaseEvent.IsApproved.Value && !s.IsRemoved.Value);
     if(string.IsNullOrWhiteSpace(tab))
     {
         var result1 = result.Where(s => s.BaseEvent.EventsCategories.Any(c => c.EventCategory.Name == tab))).ToList();
     }

}
于 2012-07-12T11:29:42.917 に答える
1

どうですか:

&& (string.IsNullOrWhiteSpace(tab) || s.BaseEvent.EventsCategories.Any(c => c.EventCategory.Name == tab))

ところで、 IsNullOrWhiteSpace を使用してください

于 2012-07-12T11:25:44.007 に答える