c# - 按多列返回 linq 组的类型

标签 c# linq

我有以下代码:

 var studentClassAttendancesGrouped =
                            classAttendanceByCriteria.OrderBy(x => x.Lecture.Id).GroupBy(x => new { x.Lecture, x.Teacher });

我正在尝试从方法返回 studentClassAttendancesGrouped。但我无法确定方法的返回类型。

最佳答案

This GroupBy 过载将返回 IEnumerable<IGrouping<TKey, TSource>>source code 可以看出.

您只需要使用 Select() 投影您的枚举当然你必须调用 ToList() 最后执行查询并创建一个列表:

var res = classAttendanceByCriteria.OrderBy(x => x.Lecture.Id)
                                   .GroupBy(x => new { x.Lecture, x.Teacher })
                                   .Select(x => new {x.Key.Lecture, x.Key.Teacher})
                                   .ToList();

但是,上面的代码创建了一个匿名类型的列表。如果你要从方法中返回上面的语句,那么你需要使用或创建一个自定义对象并返回这个列表:

public class LectureTeacher
{
    public string Lecture { get; set; }
    public string Teacher { get; set; }
}

public List<LectureTeacher> GetDogsWithBreedNames()
{
    var res = classAttendanceByCriteria.OrderBy(x => x.Lecture.Id)
                                       .GroupBy(x => new { x.Lecture, x.Teacher })
                                       .Select(x => new LectureTeacher {Lecture  = x.Key.Lecture, Teacher  = x.Key.Teacher})
                                       .ToList();

    return res;
}

顺便说一句, GroupBy还有其他几个重载,您可以指定结果选择器,它将返回 IEnumerable给你:

myList.OrderBy(x => x.Lecture.Id) 
      .GroupBy(x => new { x.Lecture, x.Teacher } //key selector
               key => new LectureTeacher // result selector
               {
                    Lecture  = key.Lecture, 
                    Teacher  = key.Teacher
               }) 
      .ToList();

关于c# - 按多列返回 linq 组的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29074184/

相关文章:

c# - 如何在 ASP.net MVC 5 中限制对 Controller 操作的访问

c# - 如何使用 C# 过滤具有多列值的数据表

.net - LINQ to SQL 还是经典的 ADO.NET?

c# - 用 linq 分组;但有条件

c# - 如何检查文件是否是 C# 中的 SQLite 数据库?

c# - 通过特定搜索从多个表中获取记录

c# - 添加 Controller 以编辑配置文件

c# - C#中如何判断SQL作业是否执行成功

.net - 使用 linq 选择组合

c# - Linq 查询多行子查询(无连接)