C# 不支持使用let关键字的实体框架核心5?

C# 不支持使用let关键字的实体框架核心5?,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我正在尝试将我们的代码从EF6迁移到EF Core 5,但遇到了一些错误。 我正在使用的代码(部分代码)是: 这会产生如下错误: 该查询包含一个投影'h\uu TransparentIdentifier2=> h_u透明标识符2.h_u透明标识符1.OldStyles .Union(h__透明认证机构2.新闻风格研究) .OrderByDescending(x=>x.Date)类型为“IOrderedQueryable”。 最终投影中的集合必须是“IEnumerable”类型 例如“列表”。考虑

我正在尝试将我们的代码从EF6迁移到EF Core 5,但遇到了一些错误。 我正在使用的代码(部分代码)是:

这会产生如下错误:

该查询包含一个投影'h\uu TransparentIdentifier2=> h_u透明标识符2.h_u透明标识符1.OldStyles .Union(h__透明认证机构2.新闻风格研究) .OrderByDescending(x=>x.Date)类型为“IOrderedQueryable”。 最终投影中的集合必须是“IEnumerable”类型 例如“列表”。考虑使用“托利斯特”或其他机制 将“IQueryable”或“IOrderedEnumerable”转换为 “IEnumerable”


我认为在我们的情况下,EF core不喜欢使用let关键字,我们有很多类似上面的代码,我们在EF6中使用let,这对“当前”查询中语句的可重用性和可读性非常好。EF core是否完全不支持这种模式,或者我缺少了什么?

看起来他们不喜欢
IQueryable
投影(
Select
-这是
隐藏的东西)。我不知道它们为什么引用最终投影,这些变量(选择)没有在最终投影中使用,这是
new GetMailChimpUserDatabaseResult{…}
,对我来说听起来像EFC bug。我还尝试添加ToList(),这是一个错误(对我来说没有意义)。在OldStyleResearch、NewStyleResearch和Theer union之后添加了此项,但这只会导致另一个错误,即:无法翻译。以可以翻译的形式重写查询,或者通过插入对“AsEnumerable”、“asAsAsAsyncEnumerable”、“ToList”或“ToListSync”的调用显式切换到客户端计算。有关更多信息,请参阅。最好询问他们的GitHub回购协议-您是否提出了解决方案?
var usersQuery = (
    from u in RepositoryContext.Users//.AsExpandable()
    from n in RepositoryContext.NewsLetters.Where(x => x.IsSubscriber && u.Email.ToLower() == x.EmailAddress.ToLower())
    
    let oldStyleResearches = (from ac in RepositoryContext.AssessmentCodes
                              join a in RepositoryContext.Assessments on ac.AssessmentKey equals a.AssessmentKey
                              join r in RepositoryContext.Research on a.AssessmentKey equals r.AssessmentKey
                              where ac.UserID == u.Id && a.CompletedDate != null
                              orderby a.CompletedDate descending
                              select new
                              {
                                  Date = a.CompletedDate.Value,
                                  Gender = r.Gender,
    
                              })
    let newStyleResearches = (from ac in RepositoryContext.AssessmentCodes
                              join a in RepositoryContext.Assessments on ac.AssessmentKey equals a.AssessmentKey
                              join rr in RepositoryContext.ResearchResponses on a.AssessmentKey equals rr.AssessmentKey
                              where ac.UserID == u.Id && a.CompletedDate != null
                              orderby rr.CreatedOn descending
                              select new 
                              {
                                  Date = rr.CreatedOn,
                                  //I had to do some mappings like that as questions do not have common type shared between surveys...
                                  Gender = rr.SurveyId == 1 ? RepositoryContext.ResearchAnswers.FirstOrDefault(x => x.ResponseId == rr.ID && x.QuestionId == 3).Value :
                                           rr.SurveyId == 2 ? RepositoryContext.ResearchAnswers.FirstOrDefault(x => x.ResponseId == rr.ID && x.QuestionId == 17).Value : string.Empty,
                              })
    let researches = oldStyleResearches.Union(newStyleResearches).OrderByDescending(x => x.Date)
    
    let firstNonNullWithGender = researches.FirstOrDefault(x => !string.IsNullOrEmpty(x.Gender))
    
    select new GetMailChimpUserDatabaseResult
    {
        Id = null,
    
        FirstName = string.Empty,
        LastName = string.Empty,
        Email = n.EmailAddress,
        Gender = firstNonNullWithGender != null ? firstNonNullWithGender.Gender : string.Empty,
    });

var result = usersQuery.ToList();