質問

私は、以下のLINQクエリー:

var aKeyword = "ACT";
var results = from a in db.Activities
              where a.Keywords.Split(',').Contains(aKeyword) == true
              select a;

キーワードはカンマ区切ります。

顔もこのクエリを取得します以下のようなエラー:

"LINQ to Entitiesを認識しない方法で'Booleanを含む[String](システム。ョンにします。クラスを提供します。.IEnumerable`1[システム。文字列]、システム。String)'メソッドは、この方法では翻訳店。

何のために私しようと考えているのだろうか。

役に立ちましたか?

解決

お客様性への配慮の大きなデータセット:

切ったお肉をミンチにしますしないような物価連動ワイルドカード文字列マッチングクライアントであり、性能を損失です。

ある理由複数のキーワード一台です。きを正常化することで、いActivityKeywordsテーブルがそれぞれの活動のいくつものキーワードに記録です。

活動activity_id,.../を受け付けております。分野キーワード*/)--->ActivityKeywords(activity_id,keyword_id)--->キーワード(keyword_id,value)

チェックと最初に通常形態: http://en.wikipedia.org/wiki/Database_normalization

編集:もされていてもィのカラムが、いつもserversideする場合には、厳しい構文:'キーワード1,keyword2,...,keywordN'):

var aKeyword = "ACT";
var results = (from a in db.Activities
              where a.Keywords.Contains("," + aKeyword) || a.Keywords.Contains(aKeyword + ",")
              select a;

他のヒント

問題はLINQ to Entitesは訳もお願いしますSQLに送信するデータベースです。

とする場合は、本当に必要なもの、できない力でLINQ to Entitiesを引くことができるすべてのデータとLINQ to-オブジェクトを評価します。

Ex:

var aKeyword = "ACT";
var results = from a in db.Activities.ToList()
              where a.Keywords.Split(',').Contains(aKeyword) == true
              select a;

意識が、これに引き戻すためのすべてのオブジェクトから活動する。代替が可能となりましたが、DBのビットを行う初期のフィルタ、フィルターダのその後:

var aKeyword = "ACT";
var results = (from a in db.Activities
              where a.Keywords.Contains(aKeyword)
              select a).ToList().Where(a => a.KeyWords.Split(',').Contains(aKeyword));

このようにLINQ to Entitiesのフィルタで人(文字列です。を含まないクエリー)フィルターでのデータは、そのフィルタしたいLINQによる物体までのオブジェです。のToList()を呼び出力LINQ to Entitiesのクエリを構築物、LINQにするオブジェクトのエンジンは第一部返します。

私からの話を分割します。ではないでしょうか。ん、ありがとうございまは別に分割でLinqで発掘とい異常なエラー:

この作品のためのLinqをオブジェクト

 var dataStore = new List<string>
                    {
                        "foo,bar,zoo",
                        "yelp,foo",
                        "fred",
                        ""
                    };
 var results = from a in dataStore
               where a.Split(new[] {','}).Contains("foo")
               select a;

 foreach (var result in results)
 {
     Console.WriteLine("Match: {0}", result);
 }

出力の

Match: foo,bar,zoo
Match: yelp,foo

実際、考える上で、必要なものに分割す。 a.Contains("foo") すったりとしたつくりで使いやすいる場合を除くないヒット foobar).

がありますの こうL2Eます。含む ソリューションするより効率的推測で上位集前のフィルタリングクライアント側で行われます。

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