LINQ Group的查询问题

时间:2014-12-17 04:57:08

标签: linq group-by linq-group

我的查询工作正常

  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;

如果现在我想使用Custom Sorting&amp;分组功能,如下所示,我该怎么做?

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

如果我尝试这个,最后一行(选择新的分组..)会抛出一个编译错误如果我将字符串更改为对象它编译正常,但然后在运行时抛出错误说至少有一个对象应该实现Icomparable for Ordering&amp;至少有一个对象应该在上面的查询中为分组部分实现IGrouping。我怎样才能做到这一点?

以下需要的是我自定义Sort&amp; amp;的定义。小组Funcs

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

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

感谢任何帮助。谢谢

1 个答案:

答案 0 :(得分: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;