+-
CodeGo.net>如何使用LINQ将映射表类合并为一个类
嗨,我正在使用C#学习LINQ,并且需要一些有关如何构建类的建议.

我需要从中创建报表的sql server中有50个现有表.这些是现有的,每个都有我需要查询的几年的数据记录.

我在使用LINQ to SQL设计器的过程中拖动了表格,并得到了类似的内容:

[Table(Name = "Data_Log_1")]
public class DataLog1
{
    [Column(Name = "rid", IsPrimaryKey = true)] 
    public int R_Id;

    [Column(Name = "name", CanBeNull = false)]
    public string Name;

    [Column(Name = "Chemical_1_Amount", CanBeNull = false)]
    public int Chemical_1_Amount;

    [Column(Name = "Chemical_2_Amount", CanBeNull = false)]
    public int Chemical_2_Amount;

    // This table continues for another 20 chemicals etc...

}

因此,在我的表单上,我可以键入查询表并输出所有结果.它返回一个包含我所有数据的DataLog1实例.

因此,我以相同的方式创建了第二张(共50张)表:

[Table(Name = "Data_Log_2")]
public class DataLog2
{
    [Column(Name = "rid", IsPrimaryKey = true)] 
    public int R_Id;

    [Column(Name = "name", CanBeNull = false)]
    public string Name;

    [Column(Name = "Chemical_1_Amount", CanBeNull = false)]
    public int Chemical_1_Amount;

    [Column(Name = "Chemical_2_Amount", CanBeNull = false)]
    public int Chemical_2_Amount;

    // This table continues for another 20 chemicals etc...

}

在所有50个数据日志表/类中,这些表都是相同的,因此我希望将它们全部保留在一个列表中,或者至少能够将它们作为同一类型传递.但是我无法做到这一点,因为一个是DataLog1,另一个是DataLog2,即使它们完全相同.

我可以创建一个holder类来做这样的事情吗?那么两个表都被读入相同的类型?

DataLog log1 = from d in dc.DataLog1
                     select d;

DataLog log2 = from d in dc.DataLog2
                     select d;

我希望能够将它们全部添加到DataLog类型的一个大列表中,并在可能的情况下通过它们进行迭代.如果是这样的话,那么牢记这一点的最佳方法是什么?有50个表,每个表约25列.

如果我做某事很愚蠢,请随时告诉我.感谢您的任何建议.

最佳答案
最好的选择是尝试将所有表合并到一个表中,并添加一列以区分它们来自哪个原始表.

如果不能这样做,则可以创建一个基类

public class DataLog
{
    [Column(Name = "rid", IsPrimaryKey = true)] 
    public int R_Id;

    [Column(Name = "name", CanBeNull = false)]
    public string Name;

    [Column(Name = "Chemical_1_Amount", CanBeNull = false)]
    public int Chemical_1_Amount;

    [Column(Name = "Chemical_2_Amount", CanBeNull = false)]
    public int Chemical_2_Amount;
}

然后为每个表派生子类

[Table(Name = "Data_Log_1")]
public class DataLog1 : DataLog
{ }

[Table(Name = "Data_Log_2")]
public class DataLog2 : DataLog
{ }

您仍然必须分别查询所有记录,但是您可以将每个表中的所有记录添加到List< DataLog>中.

点击查看更多相关文章

转载注明原文:CodeGo.net>如何使用LINQ将映射表类合并为一个类 - 乐贴网