【问题标题】:using full-text search with LINQ and EF使用 LINQ 和 EF 进行全文搜索
【发布时间】:2011-10-20 16:46:21
【问题描述】:

我正在尝试使用 EntityFramework 实现全文搜索。

我的数据库有一个名为 Users 的表和一个名为 UserInfoEntries 的表。表 users 连接到其他一些表,表 UserInfoEntries 包含用户信息。

当我想获取用户信息时,我会浏览User.UserInfoEntries 中的条目并获取具有最早条目时间戳的条目。

我想用作全文搜索键的属性是 UserInfoEntry 中的 FullName 属性。

获取具有确切全名的用户的 LINQ 如下所示:

from user in objectContext.Users

let currentInfoEntry = 
(from entry in user.UserInfoEntries
 orderby entry.EntryTimestamp descending
 select entry
).FirstOrDefault()

where currentInfoEntry.FullName == "Some Name"

select new UserWithInfo
{
    User = user,
    Info = currentInfoEntry
}

我想使用 FullName 的全文搜索。有没有比将查询转换为 SQL 更简单的方法?

【问题讨论】:

    标签: entity-framework full-text-search


    【解决方案1】:

    这不是全文搜索。这只是完全匹配的正常搜索。您可以通过还原来简化查询:

    var query = from x in objectContext.UserInfoEntries.Include("User")
                where x.FullName == "Some Name"
                orderby x.EntryTimestamp descending
                select x;
    
    UserInfoEntry entry = query.FirstOrDefault();
    User user = entry.User;
    

    此查询要求您的 UserInfoEntry 实体具有名为 User 的导航属性,指向 User 实体。

    【讨论】:

    • 抱歉造成误解,但我想知道在这种情况下如何执行全文搜索。换句话说,如何使用 FTS 查找具有某个名称的用户。 (即对于关键字 matt,我想获取所有名为 matt、matthew 和类似名称的用户)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2011-02-27
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多