【问题标题】:Filling class object from multiple dataset从多个数据集中填充类对象
【发布时间】:2015-01-14 04:47:17
【问题描述】:

我想用来自 OrganismDTAntibioticDT 的数据填充 Organism 类对象。下面是我正在尝试的数据表结构、类结构和填充技术。基于 OrganismAliasId 我必须填写 AntibioticsDT[Antibiotic objects list] 行并分配给相应的 Organisms 对象。任何人都可以帮我实现这一目标..

数据表

DataTable OrganismDT = new DataTable("Organism");
OrganismDT.Columns.Add("OrganismAliasId");
OrganismDT.Columns.Add("Name");

DataTable AntibioticsDT = new DataTable("Antibiotics");
AntibioticsDT.Columns.Add("OrganismAliasId");
AntibioticsDT.Columns.Add("Name");
AntibioticsDT.Columns.Add("Susceptibility");

类结构:

public class Organism
{
 public int AliasId { get; set; }
 public string Name { get; set; }
 public List<Antibiotic> Antibiotics;
}


public class Antibiotic
{
 public string Name { get; set; }
 public string Susceptibility { get; set; }
}

将Datatable表填充到Class对象

List<Organism> Organisms = Organism.AsEnumerable().Select(row =>
new Organism
{
 AliasId = row.Field<int>("OrganismAliasId"),
 Name = row.Field<string>("Name"),
 Antibiotics = new List<Antibiotic>()
}).ToList();

【问题讨论】:

    标签: c# .net linq datatable


    【解决方案1】:

    这应该可行:-

    List<Organism> Organisms = OrganismDT.AsEnumerable().Select(row =>
              new Organism
              {
                AliasId = row.Field<int>("OrganismAliasId"),
                Name = row.Field<string>("Name"),
                Antibiotics = AntibioticsDT.AsEnumerable()
                            .Where(x => x.Field<int>("OrganismAliasId") 
                                           == row.Field<int>("OrganismAliasId"))
                            .Select(x => new Antibiotic
                            {
                               Name = x.Field<string>("Name"),
                               Susceptibility = x.Field<string>("Susceptibility")
                            }).ToList()
                }).ToList();
    

    另外,请注意,您应该通过指定其数据类型来创建列,否则可能会引发运行时异常:-

    AntibioticsDT.Columns.Add("OrganismAliasId",typeof(int));
    

    【讨论】:

    • 它抛出错误说,“列敏感性不属于表有机体”......有机体行数据正在嵌套选择中......如何传递AntibioticsDT的行?
    • @Thavudu - 你试过我提供的确切代码了吗?如您所见,我们仅从 AntibioticsDT 获取 Susceptibility 列。它对我来说工作得很好。
    • 我只是弄错了,你的代码运行良好,而不是 x.Field 我使用的是 row.Field...感谢 Rahul 的帮助
    猜你喜欢
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多