C# 清除实体框架6和实体框架核心查询中的多对多

C# 清除实体框架6和实体框架核心查询中的多对多,c#,entity-framework,linq,C#,Entity Framework,Linq,我不得不谦虚地承认,我认为我理解EF6和EFCore中的多对多。我有你的标准例子,很多学生都有很多科目的场景,但当我试图在投影过程中导航集合以获取特定属性时,问题就出现了,我陷入了困境,不知道如何使用Select或SelectMany获取投影中的属性 例如,我将如何使用Select或SelectMany来完成此操作 我需要正确理解这两种LINQ方法,但有人能帮我吗 以下是我陷入困境的一个例子: return await _db.Subjects .Include(

我不得不谦虚地承认,我认为我理解EF6和EFCore中的多对多。我有你的标准例子,很多学生都有很多科目的场景,但当我试图在投影过程中导航集合以获取特定属性时,问题就出现了,我陷入了困境,不知道如何使用
Select
SelectMany
获取投影中的属性

例如,我将如何使用
Select
SelectMany
来完成此操作

我需要正确理解这两种LINQ方法,但有人能帮我吗

以下是我陷入困境的一个例子:

return await _db.Subjects
                .Include(s => s.Teachers)
                .Include(s => s.Students)
                .Where(s => s.Students.Select(x => x.Class.ClassName).Contains(classname))
                .Select(s => new SubjectViewModel
                        {
                            Class = s.Students.Select(p => p.Class.ClassName)
                        })

那么,我该如何完成这项工作呢?我应该执行
SelectMany
还是
Select
?哦,有人能给我指出一些MSDN以外的内容来正确理解
Select
SelectMany
?还有谁能告诉我如何在EFCore中实现这一点?我想我只是需要帮助。

基于我们必须处理的内容(正如@Matthew Cawley在评论中所说的),如果使用
Select
,您将得到类型为
IEnuberable
IQueryable
的对象,这是一个字符串列表

如果只需要一个字符串列表,可以使用
SelectMany
Select
一样进行迭代,但将结果展平到一个集合中,然后应用传递的选择器
p=>p.Class.ClassName


如果你想将它们连接成一个字符串,你可以使用
string.Join(“,”)
,但如果你使用linq to sql,就不能直接在投影中使用,因为它不知道如何将其转换成sql代码。

基于我们必须处理的内容(如@Matthew Cawley在评论中所说)如果使用
Select
,则会得到类型为
IEnuberable
IQueryable
的对象,这是字符串列表

如果只需要一个字符串列表,可以使用
SelectMany
Select
一样进行迭代,但将结果展平到一个集合中,然后应用传递的选择器
p=>p.Class.ClassName


如果要将它们连接成单个字符串,可以使用
string.Join(“,”)
,但如果使用linq to sql,则不能直接在投影中使用,因为它不知道如何将其转换为sql代码。

小点,但这是linq to entities,而不是其中一个标记所建议的linq to sql。很抱歉弄错了。我想如果你发布你对老师、学生、科目和班级的定义,我们可以看到它们之间的关系,你会得到更快的回复。此外,SubjectViewModel对于查看整体预期输出也很有用。这一点很小,但这是linq to entities,而不是其中一个标记所建议的linq to sql。很抱歉弄错了。我想如果你发布你对老师、学生、科目和班级的定义,我们可以看到它们之间的关系,你会得到更快的回复。此外,SubjectViewModel将有助于查看总体预期输出。您的回答非常有用,先生。上帝保佑你的回答很有帮助,先生。上帝保佑