(实体)Linq Group By语句类型转换

rn0zuynd  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(137)

我在将列表类型从groupby语句转换回我可以使用的类型时遇到了问题。
我知道group by会在列表中添加一个键,但是我如何去掉它,并将它转换回List<UserAnswers>呢?有人能提供一些见解或给我指出正确的方向吗?

public async Task<List<UserAnswers>>
    GetQuestionsWellAsync(string UserName) // get questions
        {
            return await ctx.UserAnswers.Where(x => x.UserId == UserName && x.Correct == 1).
                GroupBy(c => c.QuestionId).Where(grp => grp.Count() > 2).ToListAsync();
zqdjd7g9

zqdjd7g91#

您可以使用.SelectMany()将分组重新扁平化为单个聚合列表。

public async Task<List<UserAnswers>> GetQuestionsWellAsync(string UserName)
{
    return await ctx.UserAnswers
        .Where(x => x.UserId == UserName && x.Correct == 1)
        .GroupBy(c => c.QuestionId)
        .Where(grp => grp.Count() > 2)
        .SelectMany(grp => grp)
        .ToListAsync();
}

根据您的更新,EF似乎无法转换GroupBy + Where Count()表达式。您可能需要先将分组数据投影到内存中,然后再进行筛选。

public async Task<List<UserAnswers>> GetQuestionsWellAsync(string UserName)
{
    return (await userAnswers
        .Where(x => x.UserId == UserName && x.Correct == 1)
        .GroupBy(c => c.QuestionId)
        .ToListAsync())
        .Where(grp => grp.Count() > 2)
        .SelectMany(grp => grp)
        .ToList();
}

相关问题