新增文章
文章标题
分类
C#
云星空
K3 BOS
K3 功能
用友
Oracle
python
SQL
MySql
PHP
HTML
script
windows
Access
影视后期
财务
服务
生活
内容
在 C# 中,`DynamicObjectCollection` 并不是一个内置类型,可能是你项目中自定义的集合类。假设它是一个动态对象的集合(例如 `List<dynamic>` 或 `List<ExpandoObject>`),我们可以通过 `LINQ` 对其进行排序。 以下是一个示例代码,展示如何对 `DynamicObjectCollection`(假设为 `List<dynamic>`)进行排序: --- ### **1. 按动态属性排序** 假设 `DynamicObjectCollection` 是一个 `List<dynamic>`,其中每个对象包含动态属性(如 `Name`、`Age` 等),我们可以通过 `LINQ` 对某个属性进行排序。 ```csharp using System; using System.Collections.Generic; using System.Dynamic; using System.Linq; class Program { static void Main() { // 创建动态对象集合 var dynamicCollection = new List<dynamic> { new ExpandoObject(), new ExpandoObject(), new ExpandoObject() }; // 动态添加属性 dynamicCollection[0].Name = "John"; dynamicCollection[0].Age = 30; dynamicCollection[1].Name = "Alice"; dynamicCollection[1].Age = 25; dynamicCollection[2].Name = "Bob"; dynamicCollection[2].Age = 35; // 按 Name 属性排序 var sortedByName = dynamicCollection.OrderBy(x => x.Name).ToList(); // 输出排序结果 Console.WriteLine("Sorted by Name:"); foreach (var item in sortedByName) { Console.WriteLine($"{item.Name}, {item.Age}"); } // 按 Age 属性排序 var sortedByAge = dynamicCollection.OrderBy(x => x.Age).ToList(); // 输出排序结果 Console.WriteLine("\nSorted by Age:"); foreach (var item in sortedByAge) { Console.WriteLine($"{item.Name}, {item.Age}"); } } } ``` **输出结果**: ``` Sorted by Name: Alice, 25 Bob, 35 John, 30 Sorted by Age: Alice, 25 John, 30 Bob, 35 ``` --- ### **2. 降序排序** 如果需要降序排序,可以使用 `OrderByDescending` 方法: ```csharp // 按 Name 属性降序排序 var sortedByNameDesc = dynamicCollection.OrderByDescending(x => x.Name).ToList(); // 按 Age 属性降序排序 var sortedByAgeDesc = dynamicCollection.OrderByDescending(x => x.Age).ToList(); ``` --- ### **3. 处理动态属性的可能缺失** 如果某些动态对象可能没有指定的属性,可以使用 `TryGetMember` 或 `null` 检查来避免运行时异常: ```csharp var sortedByNameSafe = dynamicCollection .OrderBy(x => x.GetType().GetProperty("Name")?.GetValue(x, null) ?? "Unknown") .ToList(); ``` --- ### **4. 自定义排序逻辑** 如果需要更复杂的排序逻辑,可以使用 `IComparer` 或 `Comparison` 委托。例如: ```csharp var sortedByCustomLogic = dynamicCollection .OrderBy(x => x.Age, Comparer<int>.Create((a, b) => b.CompareTo(a))) // 按 Age 降序 .ThenBy(x => x.Name) // 然后按 Name 升序 .ToList(); ``` --- ### **5. 注意事项** - 动态对象的属性访问在运行时解析,因此需要确保属性存在,否则会抛出异常。 - 如果 `DynamicObjectCollection` 是你自定义的集合类,请确保它实现了 `IEnumerable` 接口,以便使用 `LINQ`。 如果你能提供更多关于 `DynamicObjectCollection` 的定义或用途,我可以进一步优化代码!
返回
保存