如何使用struct列表中的数据填充DataTable列?

时间:2014-05-19 12:13:02

标签: c# c#-2.0

背景

我有简单的结构:

public struct PostCode
{
    public long itemId;
    public string postCode;

    public PostCode(long id, string code)
    {
        this.itemId = id;
        this.postCode = code;
    }
}

此结构用作记录模板。

我用它来存储来自某些网络服务的数据。

我需要将这些代码与已存储在DataTable中的数据相结合。

 DataTable dt = new DataTable();
 dt.Columns.Add(new DataColumn("id", Type.GetType("System.Int32")));
 dt.Columns.Add(new DataColumn("name", Type.GetType("System.String")));
 dt.Columns.Add(new DataColumn("postCode", Type.GetType("System.String")));
 // more columns here

 // getRecords returns datatable but postCode field is empty
 // DataTable dt can contain 100-10000 records
 dt = getRecords(); 

 // preparing list of identifiers (same record count)
 List<long> listOfId = getDataIds(dt);

 // preparing list of identifiers with postal codes
 List<PostCode> codeList = getListOfPostCodes(listOfId);

 // filling postal code field in datatable
 // TODO: code I'm asking for goes here

这不是SQL数据库,数据来自Web服务,只暴露了少数方法。在服务器端加入数据或使用邮政编码查询所有数据是不可能的。

问题

  1. 如何使用DataTable对象加入我的列表?
  2. 也许我应该摆脱这个PostCode结构并改用另一个DataTable?

1 个答案:

答案 0 :(得分:0)

foreach (DataRow d in dt.Rows)
        {
            d["postCode"] = from y in codeList
                             where y.itemId == (int)d["id"]
                             select new { PostCode = y.postCode };
        }

使用快速linq语句从列表中填充数据表中的postCode。此外,id在一侧是长的而在另一侧是int,如果它存储类似的数据,你应该保持大小相同。