簡體   English   中英

在C#中的Crystal Report中對具有字母數字值的字符串字段進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM