从SQL查询(存储过程)映射到C#类结构
我有一个存储过程,它以以下格式返回数据:从SQL查询(存储过程)映射到C#类结构,c#,sql,orm,C#,Sql,Orm,我有一个存储过程,它以以下格式返回数据: public class Sp_Class { public int ItemId { get; set; } public int ParentID { get; set; } } 4 2 5 6 它将返回以下数据: ItemId ParentID 1-空 2-1 3-1 4-2 5-2 6-2 7-3 8-3 9-3 现在,我想将其组织为以下递归类结构: public class MappedS
public class Sp_Class
{
public int ItemId { get; set; }
public int ParentID { get; set; }
}
4
2 5
6
它将返回以下数据:
ItemId ParentID
1-空
2-1
3-1
4-2
5-2
6-2
7-3
8-3
9-3
现在,我想将其组织为以下递归类结构:
public class MappedStructure
{
public int ItemId { get; set; }
public List<MappedStructure> Children { get; set; }
}
一,
7
3 8
9
我知道我可以编写一个函数来实现这一点,但我觉得应该已经有工具可以实现这一点了——例如,项目的其余部分使用实体框架,而实体框架已经做到了这一点。我相信ORM就是这么做的
请注意,对于这个特定的查询,我不能使用Entity,但这超出了本文讨论的范围。下面是一个关于如何使用LINQ执行此操作的示例。首先是一个sampe数据表。我假设顶级项的父ID为Null
var dataTable = new DataTable();
// Call Sp and fill data in DataTale
表示每个数据项的类:
class Item {
public Int32 ItemId { get; set; }
public String Name { get; set; }
public IEnumerable<Item> Children { get; set; }
}
下面是一个关于如何使用LINQ实现这一点的示例。首先是一个sampe数据表。我假设顶级项的父ID为Null
var dataTable = new DataTable();
// Call Sp and fill data in DataTale
表示每个数据项的类:
class Item {
public Int32 ItemId { get; set; }
public String Name { get; set; }
public IEnumerable<Item> Children { get; set; }
}
谢谢你,这当然是个好答案,但我正在寻找一个能为我做到这一点的图书馆,如果有的话?@Alex,我不这么认为。我什么也没找到。谢谢你,这肯定是一个很好的答案,但我正在寻找一个能为我做到这一点的图书馆,如果有的话?@Alex,我不这么认为。我什么也没找到。
IEnumerable<DataRow> GetTopLevelRows(DataTable dataTable) {
return dataTable
.Rows
.Cast<DataRow>()
.Where(row => row.Field<Int32>("ParentID") == null);
}
var items = GetTopLevelRows(dataTable)
.Select(row => CreateItem(dataTable, row))
.ToList();