簡體   English   中英

該方法將返回什么?

[英]What shall this method return?

我有一個表Users,一個中間表UserMovies連接用戶和電影,兩者之間的關系是多對多的。 用戶具有的屬性如dateregistered,id,name和movie具有其他10個屬性。 我要嘗試做的只是用添加到監視列表中的電影來顯示用戶的名稱。 邏輯很好並且可以正常工作,唯一的問題是在此服務中我需要返回什么? 如果我返回用戶,則會出現一個錯誤,即我無法將IQuerable轉換為Data.Models.User。 請幫忙

        public User ShowAllMoviesfromWatchlist(string userName)
        {
        var user2 = this.context.Users.FirstOrDefault(u => u.Name == userName); 

        if (user2 == null)
        {
            throw new ArgumentException($"Username '{userName}' does not exist");
        }
        var user = this.context.Users
       .Include(u => u.UserMovie)
        .ThenInclude(um => um.Movie)
         .Select(u => new
         {
             u.Name,
             Movie = u.UserMovie.Select(um => um.Movie.Name).ToList()
         })
         .Where(u => u.Name == userName);
        //  


        var products = user.ToList();

        foreach (var item in products)
        {
            Console.WriteLine(item.Name);
            Console.WriteLine(item.Movie);
        }

        //var usermovies = user.UserMovie;
        //return user;
        return null;
    }

聽起來您希望這將返回一條記錄:

.Where(u => u.Name == userName);

即使只有一條匹配的記錄,它仍然是記錄的集合。 該集合僅包含一個。 也許您的意思是這樣的:

.SingleOrDefault(u => u.Name == userName);

這將返回一個匹配的User ,如果沒有用戶與查詢匹配,則返回null (如果存在多個匹配項,則會引發錯誤。在這種情況下,在這種情況下似乎不應該出現這種錯誤,因此這是您想知道是否會發生的錯誤。)

還不清楚您在.Select()調用中要做什么。 如果您真正想要的只是User記錄及其子項,則可以完全刪除該記錄。 所以最終就像這樣:

return context.Users
              .Include(u => u.UserMovie)
              .ThenInclude(um => um.Movie)
              .SingleOrDefault(u => u.Name == userName);

暫無
暫無

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

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