1

LINQ to Entitiesクエリでカスタム式を使用する必要がある状況があります(L2Eが他の方法では理解できないカスタムロジックが必要なため:

var query = db.MyTable.Where(MyPredicateExpression)

しかし、私はむしろクエリ理解構文を使用したいと思います:

var query = from x in db.MyTable where [x matches the predicate of MyPredicateExpression]

L2Eは他の場所でサポートしているので、これが可能であることはわかっています。

var query = from x in db.MyTable where x.Length > 10

彼らはどのようにそれを機能させるのですか?

編集:私はdevartのLinqConnect for Oracleを使用していますが、これはMicrosoftL2Eとは多少異なる動作をする可能性があります。

4

2 に答える 2

1

MyPredicateExpressionの変換を式ツリートランスレータに追加する必要があるため、EntityFrameworkとLINQtoSQLはこのシナリオをサポートしていません。
述語チェックを実行するストアド関数を作成し、この関数をDataContextに追加することをお勧めします。この場合、次のようなクエリを使用できます。

var query = from x in db.MyTable where context.MyPredicateFunction(x.Field) select x;

アップデート。コメントを考慮した更新されたクエリは次のとおりです。

int[] values = new int[] { 1, 2, 3 };
var query = from x in db.MyTable where values.Contains(x.AuditState) select x;  

更新2.次の例に示すように、必要なMyTableオブジェクトのセットを取得するQueryableプロパティをコンテキストに追加できます。


public partial class MyDataContext {  
  IQueryable<MyTable> GetSpecialTables {  
    get {   
      int[] values = new int[] { 1, 2, 3 };
      return this.MyTables.Where(x => values.Contains(x.AuditState));  
    }  
  }
}

MyDataContextをコンテキストの実際の名前に置き換えます。

于 2011-06-02T14:12:43.347 に答える
0

私が問題を正しく理解していれば、拡張メソッドを使用するか、bool を返す関数を呼び出すことができます。

于 2011-06-01T16:35:12.350 に答える