0

現在、SqlConnections/StringBuilder/SqlDataReader を使用した多数のデータ アクセス メソッドがあります。これらのいくつかをエンティティ フレームワークに移行しようとしています。次のような where 句を動的に追加するメソッドがあります。

sb.AppendLine(" WHERE ");
sb.AppendLine(" (@Value1 is null or Table1.Id = @Value1) " );
sb.AppendLine(" AND (@Value2 is null or Table2.Field = @Value2)" );
sb.AppendLine(" AND (@Value3 is null or Table3.Stuff = @Value3)" );

L2E メソッドの構文でこの動作を再現することは可能ですか? さまざまな方法で利用できるようにする必要があります。これを拡張メソッドにすることはできますか? さまざまなテーブルから選択するさまざまなクエリでどのように機能しますか?

4

2 に答える 2

1

次のようになります。

var qry = db.SomeTable
            .Where(c => value1 == null || c.Table1.Id == value1)
            .Where(c => value2 == null || c.Table2.Field == value2)
            .Where(c => value3 == null || c.Table3.Stuff == value3);

UPDATE 異なるクエリにアクセスできるようにする方法は?
他のクエリの場合- の他のインスタンスを意味する場合は、拡張メソッドIQueryable<SomeTable>を使用できます。

public static class MyExtentions
{
   public static IQueryable<SomeTable> ApplyCondition(this IQueryable<SomeTable> source)
   {
      return source
               .Where(c => value1 == null || c.Table1.Id == value1)
               .Where(c => value2 == null || c.Table2.Field == value2)
               .Where(c => value3 == null || c.Table3.Stuff == value3);
   }
}

次に、次のように呼び出すことができます。

var qry = db.SomeTable.ApplyCondition();
于 2013-11-06T14:19:29.803 に答える
0

このように、tb1.Id = equals (@Value1==null? @Value1: tb1.Id) で Table1 の tb1 を結合できます。

于 2013-11-06T14:14:24.400 に答える