Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 此方法将返回什么?_C#_Entity Framework - Fatal编程技术网

C# 此方法将返回什么?

C# 此方法将返回什么?,c#,entity-framework,C#,Entity Framework,我有一个表Users,一个连接用户和电影的中间表UserMovies,其中的关系是多对多的。用户具有dateregistered、id、name等属性,而movie具有10个其他属性。我想做的就是用用户添加到观察列表中的电影显示用户的名字。 逻辑是好的,它正在工作,唯一的问题是我需要在这个服务中返回什么? 如果我返回user,则会出现一个错误,即我无法将IQuerable转换为Data.Models.user。 请帮忙 public User ShowAllMoviesfromW

我有一个表Users,一个连接用户和电影的中间表UserMovies,其中的关系是多对多的。用户具有dateregistered、id、name等属性,而movie具有10个其他属性。我想做的就是用用户添加到观察列表中的电影显示用户的名字。 逻辑是好的,它正在工作,唯一的问题是我需要在这个服务中返回什么? 如果我返回user,则会出现一个错误,即我无法将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()
调用中,您试图做什么也不完全清楚。如果您真正想要的只是
用户
记录及其子项,那么您可以完全删除它。所以最终就像:

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

谢谢大卫的迅速回复。我想返回与名字和他在观察列表中的电影相匹配的用户。另外,如果我输入.SingleorDefault,它将具体化,我将无法返回电影列表。@grozdeto:您想返回单个对象还是对象列表?你需要下决心。这个方法应该返回什么?为什么这个方法要写入控制台呢?这里的目标是什么?我希望这个方法返回一个用户的电影列表。我使用“选择”来选择要返回的属性-仅返回用户名和电影名称。@grozdeto:答案末尾的代码正是这样做的。它返回一个
用户
对象,包括其子记录。不要担心具体选择哪些列。为了简单起见,只需返回整个对象,然后只在UI中输出所需的数据。否则,您将与半填充的
用户
或匿名类型进行斗争。