0

我有一个工作正常的查询

  private ObservableCollection<Grouping<string, SEListItemTemplate>> MonkeysGrouped { get; set; }


            var sorted = from item in CollPublic
                         orderby item.Title
                         group item by item.Title into listData
                         select new Grouping<string, SEListItemTemplate>(listData.Key, listData);

            MonkeysGrouped = new ObservableCollection<Grouping<string, SEListItemTemplate>>(sorted);

            list.ItemsSource = MonkeysGrouped;

如果现在我想使用自定义排序和分组功能,如下所示,我该怎么做?

var sorted = from item in CollPublic
                         orderby (OrderByFunc)
                         group item by (GroupByFunc) into listData
                         select new Grouping<string, SEListItemTemplate>(listData.Key, listData);

如果我尝试这个最后一行(Select new Grouping..)会引发编译错误如果我将字符串更改为对象,它编译得很好,但是在运行时会抛出一个错误,说至少 1 个对象应该实现 Icomparable for Ordering & 至少一个对象应该为上述查询中的分组部分实现 IGrouping。我怎样才能做到这一点?

以防万一,下面是我的自定义排序和分组功能的定义

public Func<SEListItemTemplate, Object> OrderByFunc
    {
        get{return _orderByFunc; }
        set {_orderByFunc = value; }
    }

public Func<SEListItemTemplate, Object> OrderByFunc
    {
        get {return _orderByFunc; }
        set {_orderByFunc = value; }
    }

任何帮助表示赞赏。谢谢

4

1 回答 1

0

更新:以下代码运行良好。请让我知道是否有更好的方法来编写下面的这个 lambda 函数。`

 var sorted = CollPublic.OrderBy(OrderByFunc).GroupBy(GroupByFunc);

                foreach (var item in sorted)
                {
                    var t = new Grouping<object, SEListItemTemplate>(item.Key, item);
                    MonkeysGrouped.Add(t); 
                }  
list.ItemsSource = MonkeysGrouped;
于 2014-12-17T05:07:36.887 回答