2013-07-18 4 views
0

У меня есть функция, написанная в LINQ к SQLобновления родовой объект в LINQ объект

public static bool update(System.Linq.Expressions.Expression<Func<T,bool>> predicate,Action<T> setter) 
     { 
      try 
      { 
       Context myContext = new Context(); 
       T updateObject; 
       updateObject = myContext.GetTable<T>().Where(predicate).First(); 
       setter(updateObject); 
       nhagoDb.SubmitChanges(); 
       return true; 
      } 
      catch (Exception ex) 
      { 
       return false; 
      } 
     } 

, но я не знаю, как написать это в LINQ к объекту, особенно там нет методы, как GetTable<T>().Where(predicate).First();

пожалуйста help большое спасибо :)

+0

Linq to objects работает против коллекции в памяти. Что вы собираете в памяти? – Maarten

+0

Я бы изменил, что Where (p) .First() в Single (p), чтобы убедиться, что вы обновляете одну запись и только на записи, –

ответ

0

Я не вижу, что такой метод даже необходим в LINQ для объектов. Ваш код может просто выполнять самую работу. Например.

var myObject = myList.First(x => x.Something); 
myObject.UpdateSomething(newValue); 
// or just: 
myList.First(x => x.Something).UpdateSomething(newValue); 

Если вы действительно хотели способ сделать это, она будет называться как:

myList.Update(x => x.Something, x => x.UpdateSomething(newValue)); 

Бывший короче, четче (ИМО), и быстрее, чем второй.

0

Вы можете реализовать myContext.GetTable() самостоятельно. Создайте метод расширения для класса Context. Внутри метода используйте отражение, чтобы найти набор db с типом T и вернуть его, остальная часть вашего кода будет работать

Смежные вопросы