我有以下代码:
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/