2013-12-12 19 views
8

Mam podmiot „post” w moim kontekście oraz następujące:Jak przeprowadzić wyszukiwanie w Entity Framework 6?

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

Jak mogę przeszukiwać wszystkie stanowiska, które tytuł zawiera 2 słowa?

UWAGA: słowa kluczowe mogą zawierać od 1 do 4 słów.

Podmiot post jest następujący:

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 

i tu jest mój 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 
); 

I zostały patrząc na jak w SQL, ale to, co jest równoważne w Entity Framework?

Czy potrzebuję wyszukiwania pełnotekstowego? I czy jest dostępny w SQL Server 2012 Express?

UPDATE

Po haim770 sugestia Próbowałem następujące:

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

Brak wpisów zostały zwrócone z tym ... jakiś pomysł?

Dziękuję, Miguel

+0

proszę pisać przykład z twoich kontekst i podmiot pocztowy. – Maess

Odpowiedz

11

można spróbować tego

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

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

A jeśli szukasz tytułów zawierających Wszystkie słowa w liście słów kluczowych, a następnie, jak powiedział:

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

Myślę, że to jest ... A w twoim przykładzie Any jest LUB. Gdybym użył WSZYSTKIEGO, dostałbym ORAZ. Co myślisz? –

+0

Zaktualizowałem moją odpowiedź –

7

coś takiego:

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

Powyższy wyda SQL LIKE zapytania.

Jeśli potrzebujesz funkcji wyszukiwania pełnotekstowego, najpierw musisz jawnie włączyć ją w bazie danych (być może będziesz musiał ją zainstalować, jeśli używasz wersji Express), a następnie użyj niektórych rozwiązań, aby ją zintegrować z Entity Framework (prawdopodobnie używając Entity Framdwork 6 'Interceptors').

+0

Mam jeden problem, jeśli słowo kluczowe to "Leao", a w tytule to "leão" ... Musiałbym zignorować przypadek i zignorować znaki specjalne. Więc "a" lub "ã" jest takie samo. Mogę to zrobić? –

+1

To zależy od kolumny Kolacja. Kolumna "SQL_Latin1_General_CP1_CI_AI" w kolumnie "Tytuł" zwraca zarówno "Leao", jak i "leão". – haim770

+0

Czy mogę ustawić sortowanie na kolumnę? Czy powinienem ustawić całą bazę danych? Jeśli tak, jak mogę to zrobić? Czy wiesz? Właśnie dodałem mój kod SQL. Przypuszczam, że lepiej ustawić to na moim T-SQL, a następnie pozwolić serwerowi SQL zdecydować, prawda? –

Powiązane problemy