C# 将linq中的通用实体更新为对象
我有一个用linq到sql编写的函数C# 将linq中的通用实体更新为对象,c#,linq,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
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;
}
}
公共静态bool更新(System.Linq.Expressions.Expression谓词,动作设置器)
{
尝试
{
Context myContext=newcontext();
T更新对象;
updateObject=myContext.GetTable().Where(谓词).First();
setter(updateObject);
nhagoDb.提交更改();
返回true;
}
捕获(例外情况除外)
{
返回false;
}
}
但是我不知道如何在linq中编写这个对象,尤其是没有像GetTable().Where(谓词).First()这样的方法代码>
请帮忙
非常感谢:)我认为在LINQ to对象中甚至不需要这样的方法。您的代码只需自己完成工作即可。例如
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),而且速度更快。您可以自己实现myContext.GetTable()。为上下文类创建扩展方法。
在方法内部,使用反射查找类型为T的db集并返回它,其余代码将工作Linq to objects针对内存中的集合工作。内存集合中的内容是什么?我会将Where(p).First()更改为单个(p),以确保只更新一条记录和一条记录,