[英]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.