質問

私はコースのテーブルが必要で検索に基づくキーワードを入力し検索ボックス。サンプルはこちらせ

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

他のヒント

述語ビルダーは法に呼ばれる含むプロパティインクルードのDBの種類を把握していないとして、

、私はこれはLINQ to SQLは内部の問題かもしれませんね。あなたは、通常のクエリ(ない述語ビルダーで)で試み、とTEXT列が含まれていますか?

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