2011-01-27 81 views
0

好吧,讓說,下面是我所導入的實體模型我的數據庫結構:實體LINQ法的連鎖查詢

Place 
---------------- 
Id bigint PK 
Name varchar(10) 

Time 
---------------- 
Id bigint PK 
PlaceId bigint FK_Place_Id 
StartTime datetime 
EndTime datetime 

DayOfWeek 
---------------- 
Id bigint PK 
Name varchar(10) 

TimeDayOfWeek 
---------------- 
TimeId bigint PK FK_Time_Id 
DayOfWeekId bigint PK FK_DayOfWeek_Id 

在LINQ方法鏈我願做類似下面的東西:

public List<Place> GetPlaces(SearchRequest request) 
     { 
      using(var c = new Context()) 
      { 
       var placereturn = c.Places.AsEnumerable(); 

       if (request.StartTime.HasValue) 
        placereturn = c.Places.Where(s => s.Time.Any(t => t.StartTime >= request.StartTime)); 
       if (request.EndTime.HasValue) 
        placereturn = c.Places.Where(s => s.Time.Any(t => t.EndTime >= request.EndTime)); 
       if (request.DayOfWeek.HasValue) 
        placereturn = c.Places.Where(s => s.Time.Any(t => t.DayOfWeeks.Any(z => z.Day = request.DayOfWeek))); 
       return placereturn; 
      } 
     } 

除了星期幾線以外的所有作品。

回答

1
public List<Place> GetPlaces(SearchRequest request) 
     { 
      using (var c = new Context()) 
      { 
       var placereturn = c.Places.AsEnumerable(); 
       if (request.StartTime.HasValue) 
        placereturn = c.Places.Where(s => s.Time.Any(t => t.StartTime >= request.StartTime)); 
       if (request.EndTime.HasValue) 
        placereturn = c.Places.Where(s => s.Time.Any(t => t.EndTime >= request.EndTime)); 
       if (request.DayOfWeek.HasValue) 
        placereturn = c.Places.Where(s => s.Time.Any(t => t.DayOfWeeks.Any(z => z.Name == request.DayOfWeek.Value))); 
       return placereturn; 
      } 
     } 

我發現,這個作品!

1

你已經接近我認爲你是後:

Public List<Place> GetPlaces(SearchRequest request) 
    { 
     using(var c = new Context()) 
     { 
      var placereturn = c.Places; 

      if (request.StartTime.HasValue) 
       placereturn = placeretun.Where(???); //Any place that has a start time greater than or equal to the search start time 
      if (request.EndTime.HasValue) 
       placereturn = placeretun.Where(???);//Any place that has a end time less than or equal to the search end time 
      if (request.DayOfWeek.HasValue) 
       placereturn = placeretun.Where(???);//Any place where the day of week = the search day of week 
      return placereturn.ToList(); 
     } 
    } 

你可以只保留追加到您的查詢。直到實際使用它纔會被評估。在這種情況下,將在返回時調用ToList時進行評估。

+0

這項工作? placereturn = placereturn.Where(s => s.Time.Any(t => t.StartTime> = request.StartTime.Value)); – Cyberdrew 2011-01-27 20:37:47

+0

我知道我忘了placereturn = placereturn。 DOH!我正在寫在記事本中。 – Cyberdrew 2011-01-27 20:38:25

0

我想你所指的問號:

if (request.StartTime.HasValue) 
      placereturn.Where(r => r.StartTime >= DateTime.Now); 

等等......