2013-12-12 12 views
8

私は、コンテキストにエンティティ「POST」を持っていると、次のEntity Framework 6で検索を実行するにはどうすればよいですか?

String[] keywords = new String[] { "Car", "Yellow" }; 

どのように私はタイトルが2つのワードが含まれているすべての記事を検索することができますか?

注:キーワードは1〜4語にすることができます。

ポストエンティティは以下の通りです:

public class Post { 
    public Int32 Id { get; set; } 
    public DateTime Created { get; set; } 
    public String Text { get; set; } 
    public String Title { get; set; } 
    public DateTime Updated { get; set; } 
} // Post 

そして、ここでは私のSQLです:

create table dbo.Posts 
(
    Id int identity not null 
    constraint PK_Posts_Id primary key clustered (Id), 
    Created datetime not null, 
    [Text] nvarchar (max) not null, 
    Title nvarchar (120) not null, 
    Updated datetime not null 
); 

私はSQLでLIKEを見てきたが、Entity Frameworkの中に相当するものは何ですか?

全文検索が必要ですか?そしてそれはSQL Server 2012 Expressで利用可能ですか?

UPDATE

haim770の提案に続いて、私は次のことを試してみました:

Context context = new Context(); 
String[] words = new String[] { "Car" }; 
List<Post> posts = context.Posts.Where(x => words.Contains(x.Title).ToList(); 

ませポストは、この...任意のアイデアで返されませんでしたか?

は、 ミゲル

+0

の例を投稿してくださいコンテクストとポストエンティティ。 – Maess

答えて

11

あなたはこの

var keywords = new String[] { "Car", "Yellow" }.ToList(); 

var p = db.Posts.Where(q => keywords.Any(k => q.Title.Contains(k))); 

を試みることと、キーワードリストにすべて単語を含むタイトルを探しているなら、あなたが言ったように:

var p = db.Posts.Where(q => keywords.All(k => q.Title.Contains(k))) 
+0

それはそうだと思います...そして、あなたの例ではAnyはORです。私がALLを使用するなら、私はANDを得るでしょう。どう思いますか? –

+0

私の答えを更新しました –

7

をありがとうございましたような何か:上記

var keywords = new[] { "Car", "Yellow" }; 
var results = context.Posts.Where(x => keywords.Contains(x.Title)); 

は、SQL LIKEクエリを発行します。

フルテキスト検索機能を使用するには、まずデータベースで明示的に有効にする必要があります(Expressバージョンを使用している場合はインストールする必要があります)。次に、いくつかのソリューションを使用して統合しますEntity Framework(おそらくEntity Framdwork 6 'Interceptors'を使用しています)。

+0

キーワードが「Leao」で、タイトルが「leão」の場合、私は問題を無視して特殊文字を無視する必要があります。だから "a"や "ã"は同じです。これはできますか? –

+1

列の照合によって異なります。 'Title'カラムの' SQL_Latin1_General_CP1_CI_AI'照合は 'Leao 'と' leao'の両方を返します。 – haim770

+0

照合順序を列に設定できますか?または、データベース全体を設定する必要がありますか?はいの場合、どうすればいいですか?あなたは知っていますか? SQLコードを追加しました。私はT-SQLでこれを設定し、SQLサーバーに決定させる方がいいでしょうか? –