C# 用于对组中的最小值进行排序的lambda表达式

C# 用于对组中的最小值进行排序的lambda表达式,c#,.net,lambda,expression,C#,.net,Lambda,Expression,我的表格数据是“ ExpenseID是主键列。 如果为personID插入记录,则记录的序列为1,历史代码指示0为活动记录。如果编辑记录,则插入新行,当前行历史代码更改为9,新行历史代码0和历史序列2。 如果为同一个人插入了另一条新记录,则会有一个序列号递增的新行 My resultSet应包含活动记录和记录插入顺序: 我需要lambda表达式 输出应该是 ExpenseID PersonID SeqNumb HistorySeqNumb HistoryCode 7 3

我的表格数据是“

ExpenseID
是主键列。 如果为
personID
插入记录,则记录的序列为1,历史代码指示0为活动记录。如果编辑记录,则插入新行,当前行历史代码更改为9,新行历史代码0和历史序列2。 如果为同一个人插入了另一条新记录,则会有一个序列号递增的新行

My resultSet应包含活动记录和记录插入顺序:

我需要lambda表达式

输出应该是

ExpenseID PersonID SeqNumb HistorySeqNumb HistoryCode 7 3 1 2 0 5 1 1 2 0 3 2 1 1 0 4 1 2 1 0 6 5 1 1 0 ExpenseID PersonID SeqNum历史SeqNum历史代码 7 3 1 2 0 5 1 1 2 0 3 2 1 1 0 4 1 2 1 0
我觉得你想要的结果好像不对

  • 您只需要活动记录,好吗
  • 他们被插入的顺序
  • 3>4>5>6>7而不是7>5>3>4>6

    在最上面的表中,再次添加了PersonID,使其ExpenseID为7,这很好,它应该是第一个(如果按降序排序)。但是,如果PersonID为1,费用ID为5,那么PersonID为5,而PersonID为5,费用ID为6是在PersonID为3,费用ID为7之前添加的上一条记录

    简言之,您的输入数据与示例所需的输出不匹配,这使得这里的任何人都很难回答您的问题

    从我所看到的情况来看,它们应该按ExpenseID排序,其中HistoryCode=0(除了糟糕的数据库设计注释)

    在这种情况下,它将是

    var sortedItems = rawItems.Where(w => (w.HistoryCode == 0)).ToList();
    sortedItems.Sort((emp1, emp2) => emp2.ExpenseID.CompareTo(emp1.ExpenseID));
    //where rawItems is a List<Object> where object has properties for ExpenseID, PersonID... etc    
    

    谢谢。但我需要记录插入表格的顺序请解释一下。如果ExpenseID是自动ID主键,则按顺序对其进行排序就是将其插入表格的顺序。或者更好的是,只需调整上面的LLAMDA,就可以按正确的顺序进行操作。
    var sortedItems = rawItems.Where(w => (w.HistoryCode == 0)).ToList();
    sortedItems.Sort((emp1, emp2) => emp2.ExpenseID.CompareTo(emp1.ExpenseID));
    //where rawItems is a List<Object> where object has properties for ExpenseID, PersonID... etc    
    
        static void Main(string[] args)
        {
            var rawItems = new[] { new { ExpenseID = 0, PersonID = 0, SeqNumb = 0, HistorySeqNumb = 0, HistoryCode = 0 } }.ToList();
            using (FileStream fs = new FileStream(Environment.CurrentDirectory + "\\data.xml", FileMode.Open, FileAccess.Read, FileShare.None))
            {
                XmlReader reader = XmlReader.Create(fs);                
                XDocument doc = XDocument.Load(reader);
                fs.Flush();
                doc.Root.Elements("Item").ToList().ForEach(i =>
                {
                    var xExpenseID = Convert.ToInt32(i.Attribute("ExpenseID").Value);
                    var xPersonID = Convert.ToInt32(i.Attribute("PersonID").Value);
                    var xSeqNumb = Convert.ToInt32(i.Attribute("SeqNumb").Value);
                    var xHistorySeqNumb = Convert.ToInt32(i.Attribute("HistorySeqNumb").Value);
                    var xHistoryCode = Convert.ToInt32(i.Attribute("HistoryCode").Value);
                    rawItems.Add(new { ExpenseID = xExpenseID, PersonID = xPersonID, SeqNumb = xSeqNumb, HistorySeqNumb = xHistorySeqNumb, HistoryCode = xHistoryCode });
                });
            }
    
            //sort
            var sortedItems = rawItems.Where(w => (w.HistoryCode == 0)).ToList();
            sortedItems.Sort((emp1, emp2) => emp2.ExpenseID.CompareTo(emp1.ExpenseID));
    
            Console.Write("ExpenseID".PadRight(16, ' '));
            Console.Write("PersonID".PadRight(16, ' '));
            Console.Write("SeqNumb".PadRight(16, ' '));
            Console.Write("HistorySeqNumb".PadRight(16, ' '));
            Console.WriteLine("HistoryCode".PadRight(16, ' '));
            foreach (var item in sortedItems)
            {
                Console.Write(item.ExpenseID.ToString().PadRight(16, ' '));
                Console.Write(item.PersonID.ToString().PadRight(16, ' '));
                Console.Write(item.SeqNumb.ToString().PadRight(16, ' '));
                Console.Write(item.HistorySeqNumb.ToString().PadRight(16, ' '));
                Console.WriteLine(item.HistoryCode.ToString().PadRight(16, ' '));
            }
    
            Console.ReadKey(true);
        }