【问题标题】:Linq: Take top elements after groupLinq:分组后取顶部元素
【发布时间】:2013-08-22 02:25:37
【问题描述】:

我有以下查询,我正在尝试按 TCount 获取 TopicCounts 的前 4 个:

  var bygroup = (from element in inputSplit
                group element by element.Text into groups
                from win in groups.TumblingWindow(TimeSpan.FromSeconds(10))
                select new TopicCounts
                    {
                     Topic = groups.Key,
                     TCount = win.Count(),
                     Score = win.Avg(element => element.Sen)
                     }
                ).OrderByDescending(x => x.TCount).Distinct().Take(4); 

每当我尝试构建时都会收到以下错误:

'Microsoft.ComplexEventProcessing.Linq.IQStreamable' 不包含“OrderByDescending”的定义并且没有扩展 方法“OrderByDescending”接受类型的第一个参数

'Microsoft.ComplexEventProcessing.Linq.IQStreamable' 可以找到(您是否缺少 using 指令或程序集 参考?)

我错过了什么?

【问题讨论】:

    标签: linq streaminsight


    【解决方案1】:

    IQStreamable 无法排序,因为它是一个流(流根据需要加载元素,排序需要整个集合)。为了对其进行排序,您需要加载整个集合。这可以通过在排序之前调用 ToList 来完成,但是如果集合很大,您最终会占用大量内存。

    【讨论】:

    • 感谢您的提示,.ToList 不起作用,但我最终构建了一个新的用户定义运算符,将我的窗口元素放入 List,然后返回 TopK。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    相关资源
    最近更新 更多