如何使用Entity Framework实现搜索功能?

Che*_*hev 6 c# linq linq-to-entities entity-framework entity-framework-4

我有一个使用Entity Framework为数据库建模的博客应用程序.这个博客的问题是找到我正在寻找的东西变得很困难.它需要一个搜索功能,但我不知道如何使用SQL和/或LINQ to Entities实现它.

现在我正在使用这个LINQ查询搜索我的数据库,但它似乎应该更好.

    public IEnumerable<BlogPost> SearchBlogPosts(string query, int page, int itemsPerPage)
    {
        var result = _dataContext.BlogPosts
            .Where(BlogPostContains(query))
            .OrderByDescending(x => x.PostedDate)
            .Skip((page - 1) * itemsPerPage)
            .Take(itemsPerPage),
        return result;
    }

    private Func<BlogPost, bool> BlogPostContains(string query)
    {
        return x => x.Title.Contains(query) || x.Body.Contains(query) || x.Author.Contains(query);
    }
Run Code Online (Sandbox Code Playgroud)

与此相关的一个大问题是搜索区分大小写.

问题1)有没有更好的方法来搜索LINQ to Entities?

问题2)只用简单的SQL怎么样?我如何在SQL Server中编写搜索存储过程,以便我可以在EF而不是LINQ中映射和使用它?

我只想在数据库中执行不区分大小写的搜索,以保持良好的性能.

提前致谢.

Bro*_*ass 5

对此的标准方法是SQL全文搜索.您必须在DB上启用全文,指定要进行全文索引的列,然后才能使用这些列使用SQL Contains查询.

Linq to Entities目前不支持全文搜索查询 - 您将不得不求助于标准SQL查询.您可以使用ExecuteStoreQuery()至少将搜索结果映射到键入的结果.