[英]Sorting string fields with alphanumeric values in crystal report in C#
我有一個從數據庫中檢索到的值,例如
BPV1, BPV2, ... CPV1, CPV2...,
打印報告的排序方式如下:
BPV1,
BPV10,
BPV100,
BPV11,
CPV1,
CPV2...
等等。
在將水晶報表分組為時,如何根據數字排序(升序)對它進行排序
BPV1,
BPV2,
BPV3,
BPV10
BPV11,
BPV20,
CPV1,
CPV2,
等等。
好吧,還不很漂亮,但我只是想舉一個可行的例子:
// Split each input string into a letters and numbers part.
public static IEnumerable<Tuple<string, int>> Split(this IEnumerable<string> input)
{
foreach (var item in input)
{
var letters = string.Concat(item.TakeWhile(c => !char.IsDigit(c)));
var digits = string.Concat(item.SkipWhile(c => !char.IsDigit(c)));
yield return new Tuple<string, int>(letters, Int32.Parse(digits));
}
}
然后按字母順序,再按數字順序。 重建原始字符串作為最后一步:
var result = list
.Split()
.OrderBy(x => x.Item1)
.ThenBy(x => x.Item2)
.Select(x => x.Item1 + x.Item2);
如果您的值始終以正好3個字母開頭,則可以執行以下操作:
values.OrderBy(s=>s.Substring(0,3)).ThenBy(s=>Convert.ToInt32(s.Substring(3, s.Length-3)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.