2013-12-12 20 views
8

Tôi đã một thực thể "POST" trên bối cảnh của tôi và sau đây:Cách thực hiện tìm kiếm trong Entity Framework 6?

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

Làm thế nào tôi có thể tìm kiếm tất cả các bài viết mà tiêu đề chứa 2 từ?

LƯU Ý: từ khóa có thể có từ 1 đến 4 từ.

Các bài thực thể như sau:

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 

Và đây là SQL của tôi:

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 
); 

Tôi đã được xem xét như thế nào trong SQL nhưng tương đương trong Entity Framework là gì?

Tôi có cần tìm kiếm toàn văn không? Và nó có sẵn trong SQL Server 2012 Express không?

CẬP NHẬT

Tiếp theo đề nghị haim770 tôi thử như sau:

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

Không có bài viết đã được trả lại với điều này ... Bất kỳ ý tưởng?

cảm ơn, Miguel

+0

Xin vui lòng gửi một ví dụ về bạn ngữ cảnh và thực thể bài đăng. – Maess

Trả lời

11

bạn có thể thử này

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

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

Và, nếu bạn đang tìm kiếm tiêu đề chứa Tất cả từ trong danh sách từ khóa, sau đó như bạn nói:

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

Tôi nghĩ rằng đó là ... Và trong ví dụ của bạn Bất kỳ là HOẶC. Nếu tôi sử dụng TẤT CẢ thì tôi sẽ nhận được AND. Bạn nghĩ sao? –

+0

Tôi đã cập nhật câu trả lời của mình –

7

Cái gì như:

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

trên sẽ phát hành một SQL LIKE truy vấn.

Nếu bạn muốn có khả năng tìm kiếm toàn văn, trước tiên, bạn phải bật nó trong cơ sở dữ liệu (bạn có thể phải cài đặt nó nếu bạn đang sử dụng phiên bản Express), sau đó sử dụng một số giải pháp để tích hợp nó với Entity Framework (có thể sử dụng Entity Framdwork 6 'Interceptors').

+0

Một vấn đề tôi gặp phải là nếu từ khóa là "Leao" và trong tiêu đề là "leão" ... Vì vậy, tôi sẽ cần phải bỏ qua trường hợp và bỏ qua các ký tự đặc biệt. Vì vậy, "a" hoặc "ã" là như nhau. Tôi có thể làm được không? –

+1

Nó phụ thuộc vào cột Collation. 'SQL_Latin1_General_CP1_CI_AI' collation trên cột' Title' của bạn sẽ trả về cả 'Leao' và 'leão'. – haim770

+0

Tôi có thể đặt đối chiếu thành một cột không? Hoặc tôi nên đặt cho toàn bộ cơ sở dữ liệu? Nếu có, làm thế nào tôi có thể làm điều này? Bạn có biết? Tôi chỉ cần thêm mã SQL của mình. Tôi cho là tốt hơn để thiết lập này trên T-SQL của tôi sau đó cho phép máy chủ SQL để quyết định, phải không? –

Các vấn đề liên quan