1

Linq-to-SQLクエリのcontainsを逆にすると、リストの単語が含まれているかどうTitleかを確認したり、次のように含めることができます。Description

var query = context.Shapes.Where(x => x.Title.Contains(words));

これが私が今持っているものですが、それは私が必要としているものとは反対です。

 List<string> words = Search.GetTags(q);
 //words = round,circle,square

 using(ShapesDataContext context = new ShapesDataContext())
 {
    var query = context.Shapes.Where(x => words.Contains(x.Title) || 

    words.Contains(x.Description));
 }

// Item 1: Title = Elipse , Decsription = This is not round circle
//This should be a match! but words doesn't contain 
//"This is not round circle", only round and circle so no match

アップデート

今私が持っています

  var query = context.Shapes.Where(x => words.Any(w => x.Title.Contains(w) || x.Description.Contains(w)))
  int s = query.Count();

int s = query.Count();しかし、「Contains演算子を除いて、クエリ演算子のLINQtoSQL実装ではローカルシーケンスを使用できません」というメッセージで例外が発生します。誰かがそれを解決する方法を知っていますか?

4

4 に答える 4

6

あなたが欲しい

x => words.Any(w => x.Title.Contains(w) || x.Description.Contains(w))
于 2012-06-08T14:56:26.097 に答える
1

最も効率的ではありませんが、私は管理しました:

 List<string> words = Search.GetTags(q);
 using(ShapesDataContext context = new ShapesDataContext())
 {
   IQueryable<Shape> query = Enumerable.Empty<Shape>().AsQueryable();
   foreach (var word in words)
   {
     query = query.Union(context.Shapes.Where(x => x.Title.Contains(word) || x.Description.Contains(word)));
   }
于 2012-06-08T15:43:48.653 に答える
0

NOT-INコレクションクエリのようなものをお探しですか?

その後、このブログ投稿が役立つかもしれません

http://introducinglinq.com/blogs/marcorusso/archive/2008/01/14/the-not-in-clause-in-linq-to-sql.aspx

HTH

于 2012-06-08T14:58:12.783 に答える
0

私の解決策はサブクエリ(サブ選択)を使用しています

  dim searchTerms as new list of(string) 'search terms here

  dim Result = (From x In DB.items Where 
                    (
                      searchTerms.Count = 0 Or
                      (From z In searchTerms Where x.SearchableText.Contains(z) Select z).Count > 0
                    )
                    Select x).ToList()
于 2014-11-01T19:49:46.480 に答える