我有一个简单的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 )。
答案 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函数。