Linq 将数据表转换为嵌套对象

Linq 将数据表转换为嵌套对象,linq,c#-4.0,Linq,C# 4.0,我有一张像这样的桌子 ------------------ StudentId Name Subject Description 1 ABC CA Descr CA 2 ABC FM Descr FM 3 ABC MJ Descr MJ 4 ABC DM Descr DM ------------------ 我已首先将数据表转换为匿名对象 var studentPlain= from dr in tbl.As

我有一张像这样的桌子

------------------ StudentId Name Subject Description 1 ABC CA Descr CA 2 ABC FM Descr FM 3 ABC MJ Descr MJ 4 ABC DM Descr DM ------------------ 我已首先将数据表转换为匿名对象

var studentPlain= from dr in tbl.AsEnumerable()
      select new{
      StudentId =Convert.ToInt32(dr["StudentId"]),
      Name=Convert.ToString(dr["Name"]),
      Subject =Convert.ToString(dr["Subject"]),
      Description = Convert.ToString(dr["Description"])
      } 

class subj
{
public string Subject {get;set;}
public string Description {get;set;}
}
class student
{
public int StudentId {get;set;}
public string Name {get;set;}
public List<subj> subjects{get;set;}
}

我需要将其转换为学生对象

试试这个。这不适用于DB,但您可以轻松更正:

public class dbStudent
{
    public int StudentId;
    public string Name;
    public string Subject;
    public string Description;
}

public class subject
{
    public string Subject;
    public string Description;
}

public class student
{
    public int StudentId;
    public string Name;
    public List<subject> subjects;
}

class Program
{
    static void Main(string[] args)
    {
        var dbStudebts = new List<dbStudent>();
        dbStudebts.Add(new dbStudent { StudentId = 1, Name = "Bob", Subject = "Math", Description = "High math" });
        dbStudebts.Add(new dbStudent { StudentId = 1, Name = "Bob", Subject = "Geography", Description = "Mountains" });
        dbStudebts.Add(new dbStudent { StudentId = 2, Name = "John", Subject = "Philosophy", Description = "Philosophy of life" });

        var result = (from o in dbStudebts
                      group o by new { o.StudentId, o.Name } into grouped
                      select new student()
                      {
                          StudentId = grouped.Key.StudentId,
                          Name = grouped.Key.Name,
                          subjects = grouped.Select(c => new subject()
                          {
                              Subject = c.Subject,
                              Description = c.Description
                          }).ToList()
                      }).ToList();
    }
}

请遵循“如何提问”指导原则并改进您的问题,以便有更好的机会获得适当的答案。很抱歉,我忘了添加更多内容。您好,按姓名分组不也会花费这么多时间吗?因为我可以只根据学生ID来做。我有点担心表现。如果我在学生班上有15个字段,那么这会妨碍我的表现。我真的很感谢你的努力。对于我不知道的15个字段,你需要同时检查这两个字段scenarious@AjaySuwalka,但我认为是一样的,因为您选择的是纯列表,然后在内存中操作,而不是在数据库中。它也会消耗CPU进行处理,我可以忽略RAM的消耗,因为内存会随着作用域的消失而释放。