我目前有代码可以让我检查一个数字是否在一个范围内。我设置了上限和下限,然后使用这样的代码。
u.RowKey.CompareTo(lowerBound) >= 0 & u.RowKey.CompareTo(upperBound) < 0)
当数字很简单时,这适用于我,例如00到08之间的某些东西。但是,如果我只想获得所有数字并仍然使用上述内容,那该怎么办?如何设置比较以包含数字。我需要将upperBound设置为某个东西,但我可以设置哪个大于数字“9”?
行键如下所示:
01-0000
02-0000
89-0000
99-9999
我希望能够设置上限,使其大于99-9999
答案 0 :(得分:1)
实现自定义比较器,如下所示:
public class RowKeyComparer : IComparer
{
int Compare(object a, object b)
{
var rowA = (RowKey) a;
var rowB = (RowKey) b;
...
}
}
答案 1 :(得分:1)
请注意,使用字符串按字母顺序排序的顺序充满了痛苦。您可以尝试使用aa-aaaa
作为黑客,但我个人很想写一个数字转换排序(自定义比较器),或者(可能更有效)我可能会添加一个预先计算的数字< / em>等效,即使"01-0000"
成为整数10000
。然后,您只需对u.KeyNumericValue
进行排序。例如,您可以在RowKey
setter中执行此操作(并将数值设置为只读,并且只能通过更改密钥进行更改)。
答案 2 :(得分:0)
将 99-9999 的值分配给upperBound
,并按以下方式修改比较语句:
u.RowKey.CompareTo(lowerBound) >= 0 & u.RowKey.CompareTo(upperBound) <= 0)
答案 3 :(得分:0)
鉴于您的示例是字符串,似乎您要检查字符串是否为有效键。假设minKey = 01-0000
和maxKey = 99-9999
(包含边界,如果您愿意),您可以使用正则表达式检查,而不是使用CompareTo。
Regex.IsMatch(u.RowKey, @"^\d[1-9]-\d{4}$")
会这样做。