Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确使用linq有效地执行从数据表到一组递归对象的转换?_C#_Linq_Design Patterns - Fatal编程技术网

C# 如何正确使用linq有效地执行从数据表到一组递归对象的转换?

C# 如何正确使用linq有效地执行从数据表到一组递归对象的转换?,c#,linq,design-patterns,C#,Linq,Design Patterns,我正在开发处理测试的软件,使用VisualStudio2008,C3.5进行开发。这些测试保存到SQLite数据库中,我的软件用于处理结果。 嗯,有一个信息表,它收集了关于测试的一般信息,包括以下列: 层名称 分层突袭 图层名称 分层 图层名称 分层 图层名称 LayerDId 开始:指示结果表创建时间的日期时间。 停止:一个日期时间,用于指示上次修改结果表的时间。 ResultTableName:此表名用于使用VirtualMode在DataGridView中显示结果。 这些层使用它们的ID和

我正在开发处理测试的软件,使用VisualStudio2008,C3.5进行开发。这些测试保存到SQLite数据库中,我的软件用于处理结果。 嗯,有一个信息表,它收集了关于测试的一般信息,包括以下列:

层名称 分层突袭 图层名称 分层 图层名称 分层 图层名称 LayerDId 开始:指示结果表创建时间的日期时间。 停止:一个日期时间,用于指示上次修改结果表的时间。 ResultTableName:此表名用于使用VirtualMode在DataGridView中显示结果。 这些层使用它们的ID和顺便说一句,从层A到层C,层的行为就像收集子层的容器。只有最后一层layerD链接到数据库中的表

公共抽象类层 { 公共字符串名称{get;set;} 公共Int32 Id{get;set;} 公共日期时间开始{get;set;} 公共日期时间停止{get;set;} } 公共类项目:层 { 私有Int32 Id{get;set;} 公共字典为{get;set;} } 公共类层:层 { 公共项目父项{get;set;} 公共字典Bs{get;set;} } 公共类LayerB:层 { 公共层父层{get;set;} 公共字典Cs{get;set;} } 公共类LayerC:层 { 公共层B父层{get;set;} 公共字典Ds{get;set;} } 公共类LayerD:Layer { 公共层父层{get;set;} 公共字符串ResultTableName{get;set;} } 显然,如果一个childLayer.StartchildLayer.Parent.Start=childLayer.Start。 Stop属性使用的逻辑类型相同,如下所示:如果是childLayer.Stop>childLayer.Parent.Stop=>childLayer.Parent.Stop=childLayer.Stop。 无论如何,事实是,我已经成功地根据上面的设计创建了所有对象,但主要是通过使用一个巨大的循环来运行前面描述的信息表中显示的所有数据行。我还制作了一个使用linq和DataTable作为可枚举的版本,但我的代码的两个版本对我来说都非常脏,很难维护。困难显然主要来自从表/数据表到这组层对象的转换

所以我现在想知道如何改进这个

有什么办法可以改进这种设计吗? 有什么好的帮助模式吗? 是否有任何适当的LINQ用于筛选和创建包含具有信息表当前架构的childlayers的字典。 谢谢。

那么为什么不

public class ConcreteLayer: Layer
{
    public Layer Parent { get; set; }
    public Dictionary<Int32, Layer> Children{ get; set; }
}

public class FinalLayer: Layer
{
    public Layer Parent { get; set; }
    public String ResultTableName { get; set; }
}

嗯,我应该重新编辑我发布的内容,不同的层A、B、C和D具有与此表无关的其他不同属性。这使得它们不同,无法关联,但我确实可以使用父类创建一个字典,同时它放松了层顺序,例如在树视图中,分配给级别0的节点是项目和响应。level1 LayerA、level2 LayerB、level3 LayerC、level4 Layer.LayerB有字典属性?可能吗?