我应该如何比较rowversion
使用实体框架领域? 我有有一个表rowversion
列,我想从哪一行版本比规定值较高的表中获取数据。
//code
byte[] rowversion = .....somevalue;
_context.Set<T>().Where(item => item.RowVersion > rowVersion);
这条线是不行的,它抛出错误:
不能适用于类型的操作数“字节[]”和“字节[]”
任何想法,我怎么可以比较rowversion
在C#/ EF领域?
这是我们做的,以解决这个问题:
使用比较扩展这样的:
public static class EntityFrameworkHelper
{
public static int Compare(this byte[] b1, byte[] b2)
{
throw new Exception("This method can only be used in EF LINQ Context");
}
}
然后,你可以做
byte[] rowversion = .....somevalue;
_context.Set<T>().Where(item => item.RowVersion.Compare(rowversion) > 0);
该工程没有一个C#实现的原因是因为比较的扩展方法实际上从来不叫,和EF LINQ简化x.compare(y) > 0
到x > y
你肯定是犹太使用RowVersion的? 当翻转会发生什么?
我认为你需要将它转换为字符串或第一诠释。 例如
Encoding.Unicode.GetString(ba)
您也可以从EF调用的SP。 :-)
使用EntitySQL。
// Drop down to ObjectContext and query against ObjectSet:
var objectContext = (dbContext as IObjectContextAdapter).ObjectContext;
// Create param for EntitySQL
var param = new ObjectParameter("rowVersion", rowVersion);
// Create IQueryable<T>
var query = objectContext.CreateObjectSet<T>.Where("it.RowVersion > @rowVersion",param);