Использование LINQ в методе обновления - проблема с предложением where - PullRequest
2 голосов
/ 29 декабря 2011

Я пишу метод обновления, который передает список объектов для обновления, мне интересно, как бы я написал запрос 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

также, если кто-то знает более простой способ выполнить то, что я делаю, пожалуйста, скажите, это кажется странным способом сделать это, но это был единственный способ, который я могу придумать / узнать, как это сделать в данный момент.

Ответы [ 3 ]

3 голосов
/ 29 декабря 2011

Вы можете сделать это с:

where updatedObjects.Any(uo => uo.ID == o.ID)
0 голосов
/ 29 декабря 2011

Вы можете создать лямбду или другой метод, который выполняет проверку для вас;например

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;
}
0 голосов
/ 29 декабря 2011

Вы должны реализовать пакетные обновления с linq, например, как это описано в http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx

...