2012-07-12 55 views
0

的我有以下查询:构造方法链(LINQ)

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(); 
     } 

    } 

但它很丑。还有其他方法吗?
谢谢。

回答

1

什么:

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

BTW,使用IsNullOrWhiteSpace

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(); 
    } 

}