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

标签 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。数据库中的名称通常如下所示:

Company::QueueName

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

Company::Group::QueueName

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

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

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

最佳答案

如果我是你,我会放弃尝试使用转换为 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 native 函数,而不是必须转换为作用于数据库的 SQL 函数。

关于c# - LINQ 获取特殊字符的最后位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28149779/

相关文章:

c# - Linq 查询适用于 Web 应用程序,但在使用 NUnit 时会抛出错误

c# - 在 ContentPresenter 子控件中设置属性

sql - 在两个服务器实例之间复制数据

SQL 最大值和分组依据

linq - 如何在 Linq 中组合多个重构的 Select 表达式(到 EF 或 SQL)?

c# using 语句 with double IDisposable

c# - Web 浏览器控件的行为与 IE 不同

c# - 无论如何,这个 LINQ 最终会做太多工作吗?

SQL Server : Unique Index on single values of two columns (! !!不是组合)

.net - linq 表达式的构造方式是否存在性能差异?