在更新方法中使用LINQ - where子句的问题

本文关键字:where 子句 问题 LINQ 更新 新方法 | 更新日期: 2023-09-27 18:19:09

我正在编写一个更新方法,传递要更新的对象列表,我想知道如何编写LINQ查询来从需要更新的数据库中获取所有对象

这是我的更新方法与linq查询的一个例子,我试图使(伪代码用于部分我不知道如何做)

void UpdateObjects(List<MyObjects> updatedObjects)
{
    DatabaseContext myContext = new DatabaseContext();
    var originalObjectsThatRequireUpdating = from o in myContext.MyObjects
                                             where o.ID matches one of updatedObjects.ID
                                             select o;

    foreach (var originalObject in originalObjectsThatRequireUpdating )
    {
         IEnumerable<MyObjects> tmpItem = updatedObjects.Where(i => i.ID == originalObject.ID);
         originalObject.Field1 = tmpItem.ToList()[0].Field1;
         //copy rest of the fields like this
    }
    myContext.SubmitChanges();
}

我不知道如何用

这样的东西轻松创建linq查询
 where o.ID matches one of updatedObjects.ID

如果有人知道一种更简单的方法来完成我正在做的事情,请告诉我,这似乎是一种奇怪的方法,但这是我目前能想到的唯一方法。

在更新方法中使用LINQ - where子句的问题

你可以这样做:

where updatedObjects.Any(uo => uo.ID == o.ID)

您应该寻找实现批量更新与linq,例如,它描述在http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx

您可以创建一个lambda或其他方法来执行检查;例如

where IDMatches(o.ID, updatedObjects)

,然后定义IDMatches作为updatedObjects的简单迭代。

static void IDMatches(int id, List<MyObject> updatedObjects)
{
    foreach (MyObject updated in updatedObjects)
    {
        if (id == updated.ID)
            return true;
    }
    return false;
}