【问题标题】:Group method not recognized in LINQ queryLINQ 查询中无法识别组方法
【发布时间】:2010-01-18 03:41:55
【问题描述】:

LINQ-newb 无法使用分组。我正在尝试查询一个名为 doseWithHighestScore 的 IEnumerable。

我正在关注这个例子: http://msdn.microsoft.com/en-us/vcsharp/aa336747.aspx#minGrouped

这是我的代码:

    var doseWithLowestVolumeForForm =
        from d in dosesWithHighestScore
        group d by d.formulation.form into g                
        select new { 
            Form = g.Key, 
            LowDose = g.Group.Min(d => d.doseAdministrableAmount)
        };

使用“组”导致此错误:

“System.Linq.IGrouping”不包含“Group”的定义,并且找不到接受“System.Linq.IGrouping”类型的第一个参数的扩展方法“Group”(您是否缺少 using 指令或程序集参考?)

这是我的用法:

using System;
using System.Text;
using System.Linq;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Collections;

为什么会出现这个错误?

【问题讨论】:

    标签: c# linq linq-to-objects


    【解决方案1】:

    您可以在分配给LowDose 时去掉Group 术语。在 LINQ-to-objects 中,组本身就是 IEnumerable<>,因此您可以对其应用其他 LINQ 操作而无需任何额外的限定符。 Key 属性在 IGrouping 上提供,以便您可以访问该组的值......好吧,分组。

    var doseWithLowestVolumeForForm =
            from d in dosesWithHighestScore
            group d by d.formulation.form into g                
            select new { 
                Form = g.Key, 
                LowDose = g.Min(d => d.doseAdministrableAmount)
            };
    

    网站上显示使用Group 属性的示例不正确。

    【讨论】:

    • 编译 - 谢谢!那么,还有一个后续问题:我如何访问结果?我以为我可以做类似dosesWithLowestVolumeForForm[0].Form 之类的事情,但这不起作用。
    • LINQ 语句的结果是一个查询对象......而不是一个数组。有不同的方法可以访问结果 - 取决于您想对它们做什么。一种常见的方法是使用foreach 循环来评估每个结果;如:foreach( var item in doseWithLowestVolumeForForm ) { ... }。或者,如果您只对第一个结果感兴趣,您可以这样做:doseWithLowestVolumeForForm.First() 这将返回查询中的第一个结果。也存在其他替代方案......但同样,这取决于您需要对结果做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多