LINQ 获取特殊字符的最后位置

LINQ get last position of special char

我有一个简单的 LINQ 查询(通过 EF 到实体的 linq)

var QueueList = (from q in context.queues                                        
                 select new { 
                             Qid = q.id, 
                             Qname = q.name.Substring(q.name.IndexOf(":") + 2) 
                 }).ToList();

我遇到的问题是 Qname。数据库中的名称通常如下所示:

Company::QueueName

但现在我有几个新队列,名称如下所示:

Company::Group::QueueName

所以我不需要在字符串中找到第一个 ":" 但最后一个。

SQL 不支持“LastIndexOf()”方法。那么我如何获得 QueueName 中的最后一个 ":"

我用“Reverse()”试过了,但结果有点不对(gnirts 而不是 字符串).

如果我是你,我会放弃尝试使用转换为 Sql 字符串函数的函数来进行字符串操作。

而是 select 完整的字符串并翻译它 post 检索。

即:

var QueueList = (from q in context.queues                                        
                 select new { 
                             Qid = q.id, 
                             Qname = q.name 
                 }).ToList()
    .Select(x => new {
         Qid = x.Qid, 
         Qname = x.Qname.Substring(x.Qname.LastIndexOf(":") + 1) 
    });

将 Substring/LastIndexOf 函数移动到 ToList() 之后意味着它们只是作用于已检索字符串的 .Net 本机函数,而不是必须转换为 SQL作用于数据库的函数。