質問
私はコースのテーブルが必要で検索に基づくキーワードを入力し検索ボックス。サンプルはこちらせ
SELECT * FROM Courses WHERE
Title LIKE '%word%' OR Title LIKE '%excel%' OR
Contents LIKE '%word%' OR Contents LIKE '%excel%'
どのように交換することはできますLINQがLINQが動作する場諸表に基づき、各キーワード
またユーザー PredicateBuilderでどの分野ではVARCHAR.の"テキスト"の分野にお見積もりは発生しないことがコンパイラーをエラーメッセージを表示します。こちらはSQLを生成するPredicateBuilder
SELECT [t0].[CoursesID], [t0].[Title], [t0].[Contents], [t0].[Active],
FROM [dbo].[Courses] AS [t0]
WHERE ([t0].[Title] LIKE '%word%') OR ([t0].[Contents] LIKE %word%) OR
([t0].Title] LIKE '%excel%') OR ([t0].[Contents] LIKE %excel%)
予告なし単一引用符の"内容"欄には、テキストフィールドのデータベースです。
が簡単に構築することが可能となるのが計算書及び添付でクエリー?なんだろうけど、日本人があまりいなPredicateBuilder?
よろしくお願いします。
解決
てくださいw/LINQと思いのままに対するLINQ to SQLデータの文脈です。持っていない予備DataContext添い寝周辺のこのが、このう過ごせばよいかを教えてくれる。
どうか分かりませんので業務データの文脈が、これらのほとんどの写基本的なもの(チェーンまたはオペレーターを含むメソッドの呼び出しで)な原因の場合の問題をクエリに変換するSQL.
最初に作成し、カスタム関数を育成のための私の述語:
Func<string, Func<DataItem, bool>> buildKeywordPredicate =
keyword =>
x => x.Title.Contains(keyword)
|| x.Contents.Contains(keyword);
この機能を単一の文字列のキーワードを返却します他の機能かDataItem-チェックでのキーワードとなります。
基本的には合格"でスタック"を取得するでしょう述語: x => x.Title.Contains("Stack") || x.Contents.Contains("Stack")
.
次回があるので、あなたは、あなたができるキーワードに必要なチェーンでは動作を作りたいものヘルパー関数のチェーン2述語とは
Func<Func<DataItem,bool>, Func<DataItem, bool>, Func<DataItem, bool>> buildOrPredicate =
(pred1, pred2) =>
x => pred1(x) || pred2(x);
この関数は2つの述語として参加し、または動作します。
さらに2つの機能できるという私が述語のようになります:
foreach (var word in keywords) {
filter = filter == null
? buildKeywordPredicate(word)
: buildOrPredicate(filter, buildKeywordPredicate(word));
}
最初の行の内部ループは基本的にチェックフィルタをnullになります。であれば、という場合もあります簡単なキーワードのフィルタ内蔵です。
Else ifフィルタがnullでない場合、またチェーン、既存のフィル、または操作で、それは、既存のフィルターと新しいキーワードフィルターをbuildOrPredicateすように設計してあります。
その後できるようになってきたのが、クエリー:
var result = data.Where(filter);
過は、複雑な述語っただけます。
わからない場合はこれらを使用PredicateBuilderかしクエリを抽出する手法翻訳のLINQ to SQLエンジンをすることはありません。
もっhavnなれに対して実データの文脈であれば問題ほど書き込むことができる。
このコンソールアプリのことを私たちのための試験 http://pastebin.com/feb8cc1e
武器agiは、dexで下がらないboxerぐ!
編集: より汎用及び再利用可能なバージョンを適切に活用し、表現の木LINQ、チェックアウトトーマスPetricekのブログ記事: http://tomasp.net/articles/dynamic-linq-queries.aspx
他のヒント
、私はこれはLINQ to SQLは内部の問題かもしれませんね。あなたは、通常のクエリ(ない述語ビルダーで)で試み、とTEXT列が含まれていますか?