我的上下文中有一个实体“POST”,以下内容:
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但实体框架中的等价物是什么?
我是否需要全文搜索?它是否可以在SQL Server 2012 Express中使用?
更新
根据haim770的建议,我尝试了以下方法:
Context context = new Context();
String[] words = new String[] { "Car" };
List<Post> posts = context.Posts.Where(x => words.Contains(x.Title).ToList();
没有回复此帖...任何想法?
谢谢你, 米格尔
答案 0 :(得分: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)))
答案 1 :(得分:7)
类似的东西:
var keywords = new[] { "Car", "Yellow" };
var results = context.Posts.Where(x => keywords.Contains(x.Title));
以上内容将发出SQL LIKE
查询。
如果您想要全文搜索功能,首先,您必须在数据库中明确启用它(如果您使用的是Express版本,则可能必须安装它),然后使用某些解决方案将其与实体框架(可能使用Entity Framdwork 6'拦截器')。