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作用于数据库的函数。
我有一个简单的 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作用于数据库的函数。