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

Mig*_*ura 9 entity-framework

我的上下文中有一个实体"POST",以下内容:

String[] keywords = new String[] { "Car", "Yellow" };
Run Code Online (Sandbox Code Playgroud)

如何搜索所有包含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
Run Code Online (Sandbox Code Playgroud)

这是我的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
);
Run Code Online (Sandbox Code Playgroud)

我一直在看SQL中的LIKE但实体框架中的等价物是什么?

我需要全文搜索吗?它是否可以在SQL Server 2012 Express中使用?

UPDATE

根据haim770的建议,我尝试了以下方法:

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

这篇文章没有回复......任何想法?

谢谢你,米格尔

Ahm*_*him 11

你可以试试这个

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

var p = db.Posts.Where(q => keywords.Any(k => q.Title.Contains(k)));
Run Code Online (Sandbox Code Playgroud)

而且,如果您正在寻找包含关键字列表中所有单词的标题,那么正如您所说:

var p = db.Posts.Where(q => keywords.All(k => q.Title.Contains(k)))
Run Code Online (Sandbox Code Playgroud)


hai*_*770 7

就像是:

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

以上将发出SQL LIKE查询.

如果您想要全文搜索功能,首先,您必须在数据库中明确启用它(如果您使用的是Express版本,则可能必须安装它),然后使用一些解决方案将其与Entity Framework集成(可能使用Entity Framdwork 6'Interceptors').