Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将linq中的通用实体更新为对象_C#_Linq - Fatal编程技术网

C# 将linq中的通用实体更新为对象

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

我有一个用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;
            }
        }
公共静态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),以确保只更新一条记录和一条记录,