12

rowversionEntity Frameworkを使用してフィールドを比較するにはどうすればよいですか?列を持つテーブルが1つrowversionあり、行バージョンが指定された値よりも高いテーブルからデータを取得したいと思います。

byte[] rowversion = ... some value;
 _context.Set<T>().Where(item => item.RowVersion > rowVersion);

この行は機能せず、エラーがスローされます。

演算子「>」は、タイプ「byte[]」および「byte[]」のオペランドには適用できません。

rowversionC#/ Entity Frameworkのフィールドを比較する方法はありますか?

4

3 に答える 3

9

これを解決するために私たちがしたことは次のとおりです。次のような比較拡張機能を使用します。

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# 実装なしで機能する理由は、Compare拡張メソッドが実際に呼び出されることはなく、EF LINQx.Compare(y) > 0x > y.

于 2017-03-13T14:01:58.113 に答える
1

RowVersion のコーシャ使用でよろしいですか? ロールオーバーするとどうなりますか?

最初に文字列または整数に変換する必要があると思います。例えば

Encoding.Unicode.GetString(ba)

EF から SP を呼び出すこともできます。:-)

于 2012-10-12T15:21:24.373 に答える
0

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);
于 2013-11-15T15:29:17.947 に答える