我正在寻找一种快速的方法来设置表中的所有标志,所以我尝试了这个:
TextSelection selection = (TextSelection)typeof(PasswordBox).GetProperty("Selection", BindingFlags.Instance | BindingFlags.NonPublic).GetMethod.Invoke(textBox, null);
Type tTextRange = selection.GetType().GetInterfaces().Where(x => x.Name == "ITextRange").FirstOrDefault();
object oStart = tTextRange.GetProperty("Start").GetMethod.Invoke(selection, null);
object oEnd = tTextRange.GetProperty("End").GetMethod.Invoke(selection, null);
MethodInfo mi = oStart.GetType().GetProperty("Offset", BindingFlags.Instance | BindingFlags.NonPublic).GetMethod;
int nStart = (int)mi.Invoke(oStart, null);
int nEnd = (int)mi.Invoke(oEnd, null);
System.Diagnostics.Debug.WriteLine(nStart + " ==> " + nEnd);
但是这不起作用,它给出了错误:
“在此前提下开始第二次操作 异步操作完成。使用'await'确保任何 在调用另一个方法之前已完成异步操作 在这种背景下。任何实例成员都不能保证是线程 安全“。
我很确定我以前做过非常类似的事情并且工作正常。这种方法可以起作用吗?
有更好的方法吗?
答案 0 :(得分:2)
执行您要实现的目标的最佳方法之一是使用Entity Framework Extended Library:
db.Companies
.Where(x => x.CheckedCompaniesHouse == true)
.Update(t => new Company { CheckedCompaniesHouse = false });
使用此库可以避免将要修改的实体加载到内存中。我上面显示的代码将被转换为sql更新批处理。
答案 1 :(得分:0)
你试过这个吗?
db.YourTable.Where(x => x.TheId == TheParameterId && x.AnotherColumn == true).ToList().ForEach(x =>
{
x.IsActive = false; x.UpdatedTimeStamp = DateTime.Now;
});
db.SaveChanges();
我不知道是否有一种简单的方法可以做到这一点,没有扩展和其他库。
但EF并不是很好,有多个这样的更新,为什么不试试Dapper呢?
还有异步方法。
你可以使用简单的ADO.NET和SQL来实现它。
类似的东西:
connection.Execute("UPDATE Table SET Field = NewValue WHERE Column = @Parameter", new { Parameter = someParameterValue });