1

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

例如,按照以下方式做是行不通的。

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 中的 ID 格式为:“JEE - 001”、“Dee - 002”等。

4

2 回答 2

1

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

如果您硬编码id为“001”,则它永远不会等于任何.TrimStart('0')调用它的 ID。让我们暂时假设p.OperationalNumber.IndexOf("-") + 1)计算结果为“001”。在它上面调用“trimstart”会将它变成“1”。“1”不等于“001”,所以不包括在内。

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

于 2012-09-24T21:14:31.207 回答
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(" ", "")删除空格

另一件事,最好解析您的 id 而不是将其与字符串进行比较,如果您确定所有 OperationalNumbers 都包含不需要修剪或替换的 int (" ","")

        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);
于 2012-09-24T22:25:40.820 回答