如何在Entity Framework 6中执行搜索?

时间:2013-12-12 15:03:42

标签: entity-framework

我的上下文中有一个实体“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();

没有回复此帖...任何想法?

谢谢你, 米格尔

2 个答案:

答案 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'拦截器')。