linq 基于列的子字符串值对实体框架中的值进行排序

brccelvz  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(120)

我在EF模型中有Department表的值,其中一列有值,如DEPTName YEAR-EMPid 'ACCT 2020- 012'、'SVC 2021- 014'、'MRKT 2022-001'。如何使用LINQ在EF中按以下顺序排序以获取值。部门的前缀有时是3或4
'MRKT 2022-001' 'SVC 2021-014' 'ACCT 2020-012'
请指示。
变量depPrefix =“XYZ“
(qry.selectx=〉新部门日期到{部门ID = x.部门ID,部门= x.部门,部门员工=x.部门子字符串(0,x.部门长度-部门前缀长度)});
上面用前缀好用的只有3个部门缩写;但当大于/小于3时失败。

kfgdxczn

kfgdxczn1#

使用可比较

static void Main(string[] args)
        {
            string[] input = {"MRKT 2022-001", "SVC 2021-014", "ACCT 2020-012"};

            var results = input.Select(x => new MyCompare(x)).OrderByDescending(x => x).Select(x => x.input).ToArray();

        }
        public class MyCompare : IComparable<MyCompare>
        {
            public string input { get; set; }
            string prefix { get; set; }
            int year { get; set; }
            int suffix { get; set; }
            const string pattern = @"^(?'prefix'[^\s]+)\s+(?'year'\d{4})-(?'suffix'.*)";
            public MyCompare(string input)
            {
                this.input = input;
                Match match = Regex.Match(input, pattern);
                prefix = match.Groups["prefix"].Value;
                year = int.Parse(match.Groups["year"].Value);
                suffix = int.Parse(match.Groups["suffix"].Value);
            }
            public int CompareTo(MyCompare other)
            {
                if (this.year != other.year)
                    return this.year.CompareTo(other.year);
                if (this.prefix != other.prefix)
                    return this.prefix.CompareTo(other.prefix);
                return this.suffix.CompareTo(other.suffix);
            }

        }

相关问题