如何使用LINQ将Repository返回的多行数据映射到Student对象?
使用LINQ将多行查询结果映射到Student对象集合
现有代码
var studentDetails = _repository.Getdata(BatchId); // 返回多行数据 Student stud_obj = new Student(); // 注:原代码中Student_obj应为笔误,修正为Student
Student类定义
// stud_obj.cs public class Student { public string Name { get; set; } public string Class { get; set; } public string Rank { get; set; } public string Gender { get; set; } }
解决方案
由于studentDetails返回多行数据,单个Student对象无法存储所有结果,需要将其映射为Student对象集合,以下是两种常见场景的LINQ实现方式:
场景1:studentDetails是带对应属性的实体集合
如果studentDetails的元素本身包含Name、Class等属性(比如EF框架的实体类),直接用Select映射:
// 转换为List<Student>集合 var studentList = studentDetails.Select(item => new Student { Name = item.Name, Class = item.Class, Rank = item.Rank, Gender = item.Gender }).ToList();
场景2:studentDetails是DataRow集合
如果studentDetails是从DataTable获取的IEnumerable<DataRow>,通过列名取值映射:
var studentList = studentDetails.Select(row => new Student { Name = row["name"]?.ToString() ?? string.Empty, Class = row["class"]?.ToString() ?? string.Empty, Rank = row["rank"]?.ToString() ?? string.Empty, Gender = row["gender"]?.ToString() ?? string.Empty }).ToList();
额外说明
- 若只需要单条数据(比如取第一条),可以在
Select后追加FirstOrDefault():Student singleStudent = studentDetails.Select(item => new Student { // 映射字段 }).FirstOrDefault(); - 映射时建议处理空值,避免
NullReferenceException,示例中用?.ToString() ?? string.Empty确保结果不为null。
内容的提问来源于stack exchange,提问作者Navy
相关产品推荐
相关产品推荐

