我有一个工作正常的查询
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);
如果我尝试这样做,最后一行(选择新的分组..(会抛出编译错误如果我将字符串更改为对象,它可以很好地编译,但在运行时抛出一个错误,说至少有 1 个对象应该实现 Icomparable 的排序和至少一个对象应该为上述查询中的分组部分实现 IGrouping。我怎样才能做到这一点?
以防万一,下面是我的自定义排序和组功能的定义
public Func<SEListItemTemplate, Object> OrderByFunc
{
get{return _orderByFunc; }
set {_orderByFunc = value; }
}
public Func<SEListItemTemplate, Object> OrderByFunc
{
get {return _orderByFunc; }
set {_orderByFunc = value; }
}
任何帮助,不胜感激。谢谢
更新:以下代码运行良好。请让我知道是否有更好的方法来编写下面的这个 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;