我有一个DataTable和一个循环的对象数组。
对于数据表中的每一行,我使用Linq搜索我的对象集合,如果找到,则需要更新该对象。 但是如何在不从数据库重新加载的情况下刷新我的集合呢?
Car[] mycars = Cars.RetrieveCars(); //This is my collection of objects
//Iterate through Cars and find a match
using (DataTable dt = data.ExecuteDataSet(@"SELECT * FROM aTable").Tables[0])
{
foreach (DataRow dr in dt.Rows) //Iterate through Data Table
{
var found = (from item in mycars
where item.colour == dr["colour"].ToString()
&& item.updated == false
select item).First();
if (found == null)
//Do something
else
{
found.updated = true;
Cars.SaveCar(found);
//HERE: Now here I would like to refresh my collection (mycars) so that the LINQ searches on updated data.
//Something like mycars[found].updated = true
//But obviously mycars can only accept int, and preferably I do not want to reload from the database for performance reasons.
}
我还能如何搜索和更新阵列中的单个项目?
答案 0 :(得分:7)
您无需更新集合 - 假设Car
是一个类,您已经通过将found.updated
设置为true
来更新数组引用的对象。< / p>
不要忘记数组只包含引用 - 因此found
引用与数组中的引用相同;通过任一变量更新对象将导致更改通过另一个变得可见。