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

时间:2015-01-26 12:04:14

标签: c# sql linq substring lastindexof

我有一个简单的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。数据库中的名称通常如下所示:

  

公司:: QUEUENAME

但现在我有一些新的队列,其名称如下:

  

公司::组:: QUEUENAME

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

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

我用“反向()”尝试过,但结果有点不对( gnirts 而不是 string )。

1 个答案:

答案 0 :(得分:5)

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

相反,只需选择完整字符串并在检索后将其翻译。

即:

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函数。