在连字符之前删除前导零和字符串

时间:2012-09-24 21:00:14

标签: c#

如何对字符串执行多重格式化?

例如以下列方式进行操作无效。

var Id = (from p in db.vwIds.Where(p => p.OperationalNumber.Substring(p.OperationalNumber.IndexOf("-") + 1).TrimStart('0')  == id)
                              group p by p.ID into g
                              select g.Key).ToList();

我可以不对字符串执行多个操作吗?

通过不起作用我的意思是它不会从“vwIds”中拉出Id。当我将id的值硬编码为“001”并删除“.TrimStart('0')”时,它会拉入ID,而不是其他。

基本上我传递的id是一个没有前导零的数字,例如“1”,“2”,“112”等 存在于vwIds中的Ids格式为:“JEE - 001”,“Dee - 002”等。

2 个答案:

答案 0 :(得分:1)

  

当我将id的值硬编码为“001”

如果您将id硬编码为“001”,它将永远不会等同于.TrimStart('0')调用它的任何ID。我们暂时假设p.OperationalNumber.IndexOf("-") + 1)评估为“001”。在其上调用“trimstart”会将其变为“1”。 “1”不等于“001”,因此不包括在内。

我的猜测是你需要在ID上调用.TrimStart('0'),或者更好的是,将两个字符串解析为数字,然后比较它们的数值,而不是它们的字符串值。

答案 1 :(得分:0)

你可以使用多个where子句获得你想要的东西,我已经尝试过它的完美工作

        var id = db.vwIds.Where(p => p.OperationalNumber.Contains('-'))
            .Where(p => p.OperationalNumber.Replace(" ", "").Split('-')[1].TrimStart('0') == "23")
            .GroupBy(p => p.ID).Select(g => g.Key);

.Contains('-')验证您的格式是否正确' xxx - yyyy'

Replace(" ", "")删除空格

另一件事,如果你确定所有的OperationalNumbers都包含一个你不需要修剪或替换的int("&#),那么解析你的id不要将它与字符串进行比较会更好。 34;,"&#34)

        var id = vwIds.Where(p => p.OperationalNumber.Contains('-'))
            .Where(p =>int.Parse(p.OperationalNumber.Split('-')[1]) == 23)
            .GroupBy(p => p.ID).Select(g => g.Key);