为特定属性排序动态List <t>

时间:2016-04-25 16:42:48

标签: c# linq list generics

我有一个通用列表,我想按两个属性排序,优先级,然后按描述填写下拉列表。

我知道当我现在完全可以做对象列表的类型时

list = list.Orderby(x=>x.property1).ThenOrderBy(x=>x.property2).

我的问题是如何检查对象上是否存在property1和property2,然后根据这些属性对列表进行排序。

3 个答案:

答案 0 :(得分:2)

因为您使用的是通用列表,编译器会为您检查。

例如:如果您编写类似

的代码
List<Object> list = new List<Object>();
var newlist = list.Orderby(x=>x.property1).ThenOrderBy(x=>x.property2);

你会在property1&amp;上遇到编译器错误property2,因为编译器无法在Object类型上找到这些属性。

如果你想支持每个应该具有这两个属性的不同类型,正确的方法是创建一个具有这两个属性的接口,让你想支持的每个类型实现该接口,然后使用约束像阿图罗提议的那样。

这样的东西
interface ICanBeSorted
{
   string property1 {get;}
   string property2 {get;
}

public List<T> MySortMethod(List<T> list) where T : ICanBeSorted
{
   return list.OrderBy(x=>x.property1).ThenOrderBy(x=>x.property2);
}

此方法将能够对实现接口ICanBeSorted的所有类型进行排序。

答案 1 :(得分:0)

您可以将选择器包装在id块中:

      gridMenuCustomItems: [
        {
          title: 'Export to Texter',
          action: function($event) {
            console.log($scope.gridApi);
            alert('do the export here');
          },
          order: 210
        }
      ],

用法:

try-catch

答案 2 :(得分:0)

好吧,你试图这样做的方式是一个坏主意。尝试先使用if-else或切换案例,然后将代码按照您想要的方式对其进行排序。