2013-12-12 30 views
8

Ben bir varlık benim bağlamına "POST" ve aşağıdaki adres:Entity Framework 6'da nasıl arama yapılır?

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

nasıl hangi başlık 2 kelime içeriyor Tüm mesajlar arayabilirim?

NOT: anahtar kelimelerde 1 ila 4 kelime olabilir.

sonrası varlıktır şu:

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 

Ve burada benim SQL edilir:

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'de LIKE bakarak edilmiştir ancak Entity Framework eşdeğer nedir?

Tam Metin Arama'ya ihtiyacım var mı? Ve SQL Server 2012 Express'te kullanılabilir mi?

GÜNCELLEME

ardından haim770 öneri denedim aşağıdaki:

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

Yayın yok bu ... Herhangi fikirle iade edildi?

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

yukarıda yayınlayacak bir SQL LIKE sorgusu:

Miguel gibi

+0

bir örneğini sonrası Lütfen senin bağlam ve sonrası varlık. – Maess

cevap

11

bu

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

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

deneyebilir Ve, anahtar kelime listesinde Tüm kelimeleri içeren başlıklara arıyorsanız, o zaman söylediği gibi:

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

Bence bu ... Ve senin örneğinde Any, OR. ALL kullanacak olsaydım ben de alırdım. Ne düşünüyorsun? –

+0

Cevabımı güncelledim –

7

Something teşekkür ederim.

Tam metin arama yetenekleri istiyorsanız, önce veritabanında açık bir şekilde etkinleştirmeniz gerekir (Express sürümünü kullanıyorsanız, onu yüklemeniz gerekebilir), daha sonra bunları entegre etmek için bazı çözümler kullanın. Varlık Çerçevesi ile (muhtemelen Entity Framdwork 6 'Interceptors' kullanıyor).

+0

Bir sorun şu ki, anahtar kelime "Leao" ise ve başlığında "leão" ise ... Bu yüzden davayı görmezden gelmem ve özel karakterleri görmezden gelmem gerekir. Yani "a" veya "ã" aynıdır. Bunu yapabilir miyim? –

+1

Sütun Harmanlamasına bağlıdır. 'Title' sütununda SQL_Latin1_General_CP1_CI_AI 'harmanlaması hem' Leao 'hem de' leão 'değerini döndürecektir. – haim770

+0

Harmanlamayı bir sütuna ayarlayabilir miyim? Yoksa tüm veritabanına mı geçmeliyim? Eğer evet ise, bunu nasıl yapabilirim? Biliyor musun? SQL kodumu ekledim. Sanırım bunu T-SQL'ime ayarlamak, sonra SQL sunucusuna karar vermek daha doğru, değil mi? –