簡體   English   中英

哪里不能加入LINQ

[英]Where and join in LINQ is not working

我有以下功能:

public IList<Movie> GetMovieTimeTable(DateTime date)
{
   var result = (from m in movierepo.Movies
   join t in timetablerepo.TimeTables on m.MovieId equals t.MovieId
   where t.StartTime.Date == date.Date
   select m).Distinct().ToList();
   return result;
}

它工作正常,但where條件不起作用。 仍會返回來自timetablerepo的所有具有相同MovieId的記錄。 是什么原因呢? 我做錯了什么? 正確的方法是什么?

編輯:示例:

我在MovieId = 34的電影中有一條記錄,在時間表中有3條記錄:

MovieId StartTime 
34 08-06-2015 19:00 
34 09-06-2015 21:00 
34 10-06-2015 20:00 
(Dutch DateTime Format) 

給定“日期”中的日期,我想過濾到當天的記錄。 (此時此刻很重要)。 現在,我正在獲取這些記錄。

范例2:

DateTime日期= {8-6-2015 00:00:00}

Result.Count=6 (That's right)
[0] 
MovieId = 2
(Etc..)
   TimeTables
   [0]
   MovieId = 2
   StartTime = {5-5-2015 20:00:00}
   (Etc..)
   [1]
   MovieId =2 
   StartTime = {28-5-2015 20:00:00}
   (Etc..)
[1]
MovieId = 13
TimeTables
   [0]
   MovieId = 13
   StartTime = {28-5-2015 21:00:00}
   (etc..)
   [1]
   MovieId = 13
   StartTime = {28-5-2015 19:50:00}
   (etc..)
(etc..)

編輯3:電影模型:

public partial class Movie
{
    public Movie()
    {
        TimeTables = new HashSet<TimeTable>();
    }
    [Key]
    public int MovieId { get; set; }
    public string MovieName { get; set; }
    public int MovieGenre { get; set; }
    public string MoviePicture { get; set; }
    public string MovieDescription { get; set; }
    public string MovieShortText { get; set; }
    public bool? MovieIs3d { get; set; }
    public bool? MovieIsImax { get; set; }
    public int MovieLanguage { get; set; }
    public bool? MovieSubtitled { get; set; }
    public int? MovieMinimalAge { get; set; }
    public bool? MovieHasDrugs { get; set; }
    public bool? MovieHasViolence { get; set; }
    public bool? MovieHasSex { get; set; }
    public bool? MovieHasSwearing { get; set; }
    public bool? MovieIsScary { get; set; }
    public bool? MovieHasDiscrimination { get; set; }
    public string MovieTrailer { get; set; }
    public int MovieLength { get; set; }
    public int? Genre_GenreId { get; set; }
    public int? Language_LanguageId { get; set; }
    public virtual Genre Genre { get; set; }
    public virtual Language Language { get; set; }
    public virtual ICollection<TimeTable> TimeTables { get; set; }
}

時間表:

public partial class TimeTable
{
    public TimeTable()
    {
        Reservations = new HashSet<Reservation>();
    }
    public int TimeTableId { get; set; }
    public int MovieId { get; set; }
    public int RoomId { get; set; }
    public int SeatsAvaible { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }
    public virtual Movie Movie { get; set; }
    public virtual ICollection<Reservation> Reservations { get; set; }
    public virtual Room Room { get; set; }
}

編輯4:也可以查詢時間表到電影的時間表,但是我會得到多個電影記錄,因為時間表中每個電影都有1條以上的記錄,而我的查詢條件不是很好,但是如果有解決方案,我會樂於聽到:)

最終,我相信問題是因為您試圖重用數據類來保存View數據。 僅創建一組新的類將是最簡單的,但這可能會幫助您:

public IList<Movie> GetMovieTimeTable(DateTime date)
{
   var result = movierepo.Movies
     .Join(timetablerepo.TimeTables,m=>m.MovieId,tt=>tt.MovieId,
       (m,g)=>new Movie{
         MovieId=m.MovieId,
         ... rest of properties here ...
         TimeTables=g.Where(tt=>tt.StartDate.Date==date.Date).ToList()
       })
     .Where(m=>m.TimeTables.Any())
     .ToList();
   return result;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM