使用反向SQL命令将SQL查询转换为LinQ

时间:2017-04-15 05:16:06

标签: c# sql-server linq reverse

我有一个查询,它反转字符并将反转后的第一个字母大写。在我的T-SQL中,它正在运行但是当我尝试将其转换为Linq查询时,我遇到的问题是

Reverse is not supported

这是我的工作查询

Upper(Left(REVERSE(Firstname),1))+Lower(Reverse(Left(Right(Firstname, LEN(Firstname)),LEN(Firstname)-1))) as NameReverse

// "Name" is the result without reverse, but after the reverse query, it will be
// "Eman"

这是我在linq中的反向工作

TheLengthOfName = name.FirstName.Reverse()

提前谢谢。

1 个答案:

答案 0 :(得分:0)

感谢提供R. Martinho Fernandesthis answer和提供改进的RobinHood70,我为字符串反转创建了一个扩展方法:

public static string Reverse(this string s)
{
    if(string.IsNullOrEmpty(s))
    {
        return s;
    }
    var info = new StringInfo(s);
    var sb = new StringBuilder();

    for(int i = info.LengthInTextElements - 1; i > -1 ; i--)
    {
        sb.Append(info.SubstringByTextElements(i, 1));
    }
    return sb.ToString();
}

我已经轻轻修改了Darren Sherwood的答案here,以便返回您想要的大写字符串:

public static string Capitalize(this string s)
{
    if(string.IsNullOrEmpty(s))
    {
        return s;
    }
    var charArray = s.ToLower().ToCharArray();
    charArray[0] = Char.ToUpper(charArray[0]);
    return new string(charArray);
}

现在,要将它与linq查询结合起来,您需要这样的内容:

var query = from person in people
            select person.FirstName.Reverse().Capitalize();

See a live demo on rextester.