2017-01-19 18 views
0

我必须吃谦虚的馅饼,并承认我认为我在EF6和EFCore中多了解多人。我有你的标准例子,许多学生有很多学科情景,但是当我试图导航集合以获取特定属性时,问题就出现在我被卡住的投影中,并且无法弄清楚如何使用SelectSelectMany得到属性在我的投影。清除实体框架6和实体框架中的多对多内核查询

因此,例如,我将如何使用SelectSelectMany完成此操作?

我需要正确理解这两个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) 
         }) 

那么,如何完成这个,我做了SelectManySelect?哦,任何人都可以指向我以外的其他内容正确理解SelectSelectMany?任何人都可以告诉我这将如何在EFCore中完成?我想我只需要帮助。

+0

小的一点,但这是** linq-to-entities **而不是linq-to-sql,正如其中一个标签所暗示的。 –

+0

抱歉混淆。将相应地编辑它。 –

+1

我想你会得到一个更快的答复,如果你张贴你的班级定义的教师,学生,主题和类,所以我们可以看到的关系。此外,SubjectViewModel将有助于查看总体预期输出。 –

回答

2

根据我们与合作(如@Matthew考利在注释中说的),如果你使用SelectIEnuberable<IEnumerable<string>>类型或IQueryable<IQueryable<string>>的对象,它是字符串列表的列表。

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

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

+0

你的回答很有帮助先生。上帝保佑 –