質問
ということができ合いを表す正常に私が求めていたものが、今ではもうほとんどの曲のコードの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家族のことです。もうひとつは、ジェネリック医薬品はお手軽に、問題のようです。そのアイデア?
他のヒント
その音のようです基本的には条件付きプレディケービルダー..
いただければと思い金型にするようなもので、頑張ってください。
いう表現樹:
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);
所属していません StackOverflow