我有一个对象列表:
someID: 1234 values: A, B
someID: 891 values: C
我有一些带有行的数据表。
1234 D
891 E
1234 F
我想将这些值从datatable
添加到内存列表中的各个对象。例如,我想在列表中找到包含ID
1234的对象,并向对象添加值D
和F
。
什么会有最好的表现?
编辑:不是真正的数据库问题,我会尽力使其更清晰
答案 0 :(得分:1)
您可以使用Linq-To-DataSet
:
var both = from row in dt.AsEnumerable()
join objA in objectAList
on row.Field<int>(0) equals objA.someID
select new { row, objA };
foreach(var x in both)
{
x.objA.values.Add(x.row.Field<string>(1)); // presuming an `IList<T>`
}
如果它不是列表而是例如数组,则可以使用:
x.objA.values = x.objA.values.Concat(new[]{x.row.Field<string>(1)}).ToArray();
Enumerable.Join
使用引擎盖下的it's rather efficient。
答案 1 :(得分:1)
您只需要遍历行,搜索id并将值添加到其中
foreach (DataRow item in datatable.Rows)
{
<YourType> thing = list.Find(x => x.someID == (int)item[0]);
if (thing == null)
{
List<string> values = new List<string>();
values.Add(item[1].ToString());
list.Add(new <YourType> { someID = (int)item[0], values = values });
}
else
{
thing.values.Add(item[1].ToString());
}
}
答案 2 :(得分:0)
根据需要,在ID上创建主键并执行upinsert(更新或插入不存在) - 因此您需要为每个ID执行1次操作,并且可以创建附加新数据的存储过程。
从您的问题看来,您希望进行批量操作 - 这意味着在内存中执行所有这些操作,而不是在1次操作中更新数据库。 为此你使用哈希表