1

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

公司::队列名称

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

公司::组::队列名称

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

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

我用“ Reverse() ”尝试过,但结果有点错误(gnirts而不是string)。

4

1 回答 1

5

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

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

IE:

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

于 2015-01-26T12:22:04.773 回答