将linq中的通用实体更新为object

时间:2013-07-18 13:48:25

标签: c# linq

我有一个用linq编写的函数到sql

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();的方法

请帮忙 非常感谢:))

2 个答案:

答案 0 :(得分:0)

我没有看到在LINQ对象中甚至需要这样的方法。您的代码可以简单地完成工作。 E.g。

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));

前者更短,更清晰(IMO),并且比后者更快。

答案 1 :(得分:0)

您可以自己实现myContext.GetTable()。为Context类创建扩展方法。 在方法内部使用反射来查找db set whith类型T并返回它,其余的代码将起作用