質問

ということができ合いを表す正常に私が求めていたものが、今ではもうほとんどの曲のコードのmy libraryの繰り返しのような実践乾燥させます。いてのSQLサーバーテーブルをしているところ照会に基づく簡単なユーザによって提供された検索フィールドalaます。を使用していLINQを構成する最終的なクエリーに基づき、検索文字列になります。を探していなければならないというニーズ用のジェネリック医薬品は、渡されたラムダの機能を再利用可能なルーチンの本:

string[] arrayOfQueryTerms = getsTheArray();

var somequery = from q in dataContext.MyTable
                select q;

if (arrayOfQueryTerms.Length == 1)
{
    somequery = somequery.Where<MyTableEntity>(
        e => e.FieldName.StartsWith(arrayOfQueryTerms[0]));
}
else
{
    foreach(string queryTerm in arrayOfQueryTerms)
    {
        if (!String.IsNullOrEmpty(queryTerm))
        {
            somequery = somequery 
                        .Where<MyTableEntity>(
                            e => e.FieldName.Contains(queryTerm));
        }
    }
}

つくろうと思いました作汎用方法に署名するようになります:

private IQueryable<T> getQuery(
    T MyTableEntity, string[] arrayOfQueryTerms, Func<T, bool> predicate)

私が使っているのと同様の検索戦略すべての私のテーブルで、こんでから利用への使用はMyTable&MyTableEntity検索をはFieldNameを検索します。こしょう?があるので、とLINQ動的にパス名の場合、where?するのですか、それとも渡ること述語lambda?

e => e.FieldName.Contains(queryTerm)

私が百万円となり、半分にないこのアプリケーションで、やりやすいのですが、プレイしていただければと思いくものLINQ家族のことです。もうひとつは、ジェネリック医薬品はお手軽に、問題のようです。そのアイデア?

役に立ちましたか?

解決

ようにも思えますねんまりとした動的Linq.見 こちらの.ことができ、パス文字列を引数としての照会方法により

var query = dataSource.Where("CategoryID == 2 && UnitPrice > 3")
                      .OrderBy("SupplierID");

編集:他の投稿このことに関して、C#4のダイナミックサポート: 第1部第2部.

他のヒント

その音のようです基本的には条件付きプレディケービルダー..

いただければと思い金型にするようなもので、頑張ってください。

http://www.albahari.com/nutshell/predicatebuilder.aspx

いう表現樹:

IQueryable<T> getQuery<T>(T myTableEntity, string[] arrayOfQueryTerms, Expression<Func<T, bool>> predicate)
 { var fieldOrProperty = getMemberInfo(predicate);
   /* ... */
 }

MemberInfo getmemberInfo<T>(Expression<Func<T,bool> expr)
 { var memberExpr = expr as MemberExpression;
   if (memberExpr != null) return memberExpr.Member;
   throw new ArgumentException();
 }

var q = getQuery<FooTable>(foo, new[]{"Bar","Baz"}, x=>x.FieldName);

ていこうとするでしょう。が必要となりま 動的Linq こちらの はいち早く入手することができるこの強く型付けされた.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top