2013-12-12 44 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看着喜歡,但什麼是實體框架中的相同呢?

我需要全文搜索嗎?它在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

我認爲就是這樣......而在你的例子中任何都是OR。如果我使用ALL,那麼我會得到AND。你怎麼看? –

+0

我更新了我的答案 –

7

喜歡的東西:

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

上面會發出一個SQL查詢LIKE

如果您需要全文搜索功能,首先,您必須在數據庫中明確啓用它(如果您使用的是Express版本,您可能必須安裝它),然後使用一些解決方案將其集成與實體框架(可能使用實體框架6'攔截器')。

+0

我遇到的一個問題是,如果關鍵字是「Leao」,標題中是「leão」......所以我需要忽略大小寫並忽略特殊字符。所以「a」或「ã」是相同的。我可以這樣做嗎? –

+1

這取決於列整理。 'Title'列中的'SQL_Latin1_General_CP1_CI_AI'整理將返回'Leao'和'leão'。 – haim770

+0

我可以將排序規則設置爲列嗎?或者我應該設置爲整個數據庫?如果是的話,我該怎麼做?你知道嗎?我剛剛添加了我的SQL代碼。我想最好在我的T-SQL上設置它,然後讓SQL服務器來決定,對吧? –

相關問題