如何对字符串执行多重格式化?
例如以下列方式进行操作无效。
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”等。
答案 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);