背景
我有简单的结构:
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服务,只暴露了少数方法。在服务器端加入数据或使用邮政编码查询所有数据是不可能的。
问题
答案 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,如果它存储类似的数据,你应该保持大小相同。