2

我在 SQL 中有代码,它会占用 SMS 消息的长度,并告诉我消息有多少部分。

消息 <= 160 个字符是一部分。

超过 160 个字符的消息成为多部分消息,每个部分将包含 152 个字符。有人可以帮我找出一个体面的算法来完成类似于 C# 中的以下内容(欢迎使用 lambda 和 linq 表达式):

select  
    (case 
        when (LEN(Message)<=160) then 1
        when (LEN(Message)>160 and LEN(Message)<305) then 2
        when (LEN(Message)>304 and LEN(Message)<457) then 3
        when (LEN(Message)>456 and LEN(Message)<609) then 4
        when (LEN(Message)>608 and LEN(Message)<761) then 5
        when (LEN(Message)>760 and LEN(Message)<913) then 6
        when (LEN(Message)>912 and LEN(Message)<1065) then 7
        when (LEN(Message)>1064 and LEN(Message)<1217) then 8
        when (LEN(Message)>1216 and LEN(Message)<1369) then 9
        when (LEN(Message)>1368 and LEN(Message)<1521) then 10
        else 'n'
    end) as [Msg Parts]
from tblAuditLog 
4

3 回答 3

2
(message.Length <= 160) ? 1 : (message.Length + 151) / 152)

假定消息是一个名为 的字符串message。它负责四舍五入(通过+ 151)并使用整数除法。

于 2013-08-21T14:20:01.573 回答
0

为什么不在你的 SQL 中做呢?这真的没关系,但是当它是一个简单的划分问题时,你不需要列出所有的情况:

1+ (LEN(Message)-160)/152 AS [Msg Parts]

我不熟悉在您的 SQL 中如何处理除法,因此为了安全起见,您还应该四舍五入 (LEN(Message)-160)/152。

于 2013-08-21T14:18:31.163 回答
0

如果您正在寻找原始翻译,请尝试:

from n in tblAuditLog
select new
{
    Parts = 
    (
        n.Length <= 160 ? 1 :
        n.Length > 160 ? 2 :
        n.Lenth > 304 ? 3 :
        //and so on
    )
}
于 2013-08-21T14:23:41.370 回答