Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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/8/linq/3.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# 无法为列表中的列表翻译来自的.NET Core 3.1 LINQ表达式_C#_Linq - Fatal编程技术网

C# 无法为列表中的列表翻译来自的.NET Core 3.1 LINQ表达式

C# 无法为列表中的列表翻译来自的.NET Core 3.1 LINQ表达式,c#,linq,C#,Linq,我有一个包含博客帖子ID的列表。该列表是通过一个单独的系统生成的,该系统允许用户从多个参数中筛选帖子。我已经测试过了,它是有效的。我的目标是获取这个列表并执行一个LINQ查询,该查询将获取发表帖子的用户,并根据发布者对帖子进行排序。查询如下: List<UserPostDTO> UserPosts = await (from x in _context.UserPosting //UserPosting links User and Post tab

我有一个包含博客帖子ID的列表。该列表是通过一个单独的系统生成的,该系统允许用户从多个参数中筛选帖子。我已经测试过了,它是有效的。我的目标是获取这个列表并执行一个LINQ查询,该查询将获取发表帖子的用户,并根据发布者对帖子进行排序。查询如下:

 List<UserPostDTO> UserPosts =
                await (from x in _context.UserPosting //UserPosting links User and Post tables in the db. It has both user id and post id
                       where PostedByList.Contains(x.Posting.PostingId) //PostedByList is a List<int>
                       && x.Approved == "A"       //only show posts that have been approved
                       && x.User.Active == true   //only show posts from active users
                       group x by new { x.User.FirstName, x.User.LastName, x.User.UserId } into xGroup
                       select new UserPostDTO  //Object containing First/Last name, email, and List<PostPOCO>
                       {
                           FirstName = xGroup.Key.FirstName,  //string
                           LastName = xGroup.Key.LastName,    //string
                           UserEmail = xGroup.Key.UserId,     //int
                           //PostsByUser = (from y in xGroup    //List of PostPOCO objects
                           //               select new PostPOCO
                           //               {
                           //                   PostTitle = y.Posting.Title, //string
                           //                   PostId = y.Posting.PostingId //int
                           //               }).ToList()
                        }).ToListAsync(); //I have read this should solve the issue. It does not.
列出用户帖子=
wait(从_context.UserPosting//UserPosting中的x)链接数据库中的用户和Post表。它同时具有用户id和Post id
其中PostedByList.Contains(x.Posting.PostingId)//PostedByList是一个列表
&&x.已批准==“A”//仅显示已批准的帖子
&&x.User.Active==true//仅显示来自活动用户的帖子
按新的{x.User.FirstName,x.User.LastName,x.User.UserId}将x分组到xGroup中
选择newuserpostdto//Object,其中包含名字/姓氏、电子邮件和列表
{
FirstName=xGroup.Key.FirstName,//字符串
LastName=xGroup.Key.LastName,//字符串
UserEmail=xGroup.Key.UserId,//int
//PostsByUser=(来自xGroup//PostPOCO对象列表中的y)
//选择新的Postoco
//               {
//PostTitle=y.Posting.Title,//字符串
//PostId=y.Posting.PostingId//int
//}).ToList()
}).ToListAsync()//我读过这篇文章,应该可以解决这个问题。事实并非如此。
当我取消对PostsByUser查询部分的注释时,在点击查询时会出现以下错误:

无法翻译LINQ表达式[…]。以可以翻译的形式重写查询,或者通过插入对AsEnumerable()、AsAsAsAsyncEnumerable()、ToList()或ToListSync()的调用显式切换到客户端计算。有关更多信息,请参阅

如果对代码的这一部分进行了注释,则运行时不会出现任何错误

我想不出办法来解决这个问题。我已尝试用
\u context.UserPosting.AsEnumerable()
替换第二行,但这与.ToListAsync()冲突,后者本应是客户机/服务器评估解决方案的一部分。所以那里没有运气

这有点问题,因为子列表依赖于主查询


有没有办法解决这个问题?我在LinqPad试用过,效果不错。它在VisualStudio中编译,没有错误。它只是在实际尝试运行时崩溃了。

我发现了。事实证明,微软对EF Core的新修改所施加的限制改变了Group条款中的工作原理:

要使其工作,需要对数据库进行新的查询。可能不太理想,但事实是:

List<UserPostDTO> UserPosts =
   await (from x in _context.UserPosting 
          where PostedByList.Contains(x.Posting.PostingId)
           && x.Approved == "A"      
           && x.User.Active == true   
           group x by new { x.User.FirstName, x.User.LastName, x.User.UserId } into xGroup
           select new UserPostDTO 
                       {
                           FirstName = xGroup.Key.FirstName,  
                           LastName = xGroup.Key.LastName,    
                           UserEmail = xGroup.Key.UserId,     
                           PostsByUser = (from y in _context.UserPosting
                                          where xGroup.Key.UserId == y.UserId    
                                          select new PostPOCO
                                          {
                                              PostTitle = y.Posting.Title, 
                                              PostId = y.Posting.PostingId 
                                          }).ToList()
                        }).ToListAsync(); 
列出用户帖子=
等待(从x in_context.UserPosting
其中PostedByList.Contains(x.Posting.PostingId)
&&x.批准==“A”
&&x.User.Active==true
按新的{x.User.FirstName,x.User.LastName,x.User.UserId}将x分组到xGroup中
选择newuserpostdto
{
FirstName=xGroup.Key.FirstName,
LastName=xGroup.Key.LastName,
UserEmail=xGroup.Key.UserId,
PostsByUser=(来自_context.UserPosting中的y)
其中xGroup.Key.UserId==y.UserId
选择新的Postoco
{
PostTitle=y.Posting.Title,
PostId=y.Posting.PostingId
})托利斯先生()
}).ToListAsync();