3

我有一个表单,其中包含一个立即更新的对象列表。在控制器中,嵌套循环将每个模型与其他模型进行比较,以便确定哪些对象已更新,哪些对象是新的。

foreach(var x in formObject)
{
    foreach(var y in dbObject)
    {
        if(x.id == y.id)
        {
             //compare each property and notify user of change if different
        }
    }
}

考虑到大量对象和服务器的速度,这需要大量时间。

这样做有更好的做法吗?在遍历所有对象之前确定哪些对象已更新的某种方法?还是更有效的循环?

4

2 回答 2

2

您可以在 Linq 中使用联接:

var differences = 
    from x in formObject
    join y in dbObject on x.id equals y.id
    where ( /* compare each property */ )
    select new { /* what do you want to tell the user */ };

当然,如果没有关于循环中内容的更多信息,这就是我可以提供的所有代码。

在流利的语法中,这将是:

var differences =
    formObject.Join(dbObject, x => x.id, y => y.id, (x, y) => new { x, y })
              .Where(p => /* compare properties of p.x and p.y */)
              .Select(p => new { /* what do you want to tell the user */ });
于 2013-11-12T23:41:54.963 回答
1

您可以将所有 dbObjects 放入字典中,使用 id 作为键。然后你可以在字典中查找每个对象,而不必遍历所有对象:

var dbObjects = new Dictionary<int, ObjectModel>();
foreach(var y in dbObject)
{
    dbObjects.Add(y.id, y);
}

foreach(var x in formObject)
{
    ObjectModel y;
    if(dbObjects.TryGetValue(x.id, out y))
    {
        //compare each property and notify user of change if different
    }
}
于 2013-11-12T23:49:12.177 回答