1

我有一个数据集表,我想按 column 对其进行分组MOID,然后在这个组中我想选择具有 column 最大值的行radi

谁能告诉我如何通过 LINQ to dataset 做到这一点?

4

3 回答 3

6

尽管 Barry 发布的解决方案应该可以工作(有一些修复),但它是次优的:您不需要对集合进行排序来查找具有字段最大值的项目。我写了一个WithMax扩展方法,它返回具有指定函数最大值的项:

    public static T WithMax<T, TValue>(this IEnumerable<T> source, Func<T, TValue> selector)
    {
        var max = default(TValue);
        var withMax = default(T);
        bool first = true;
        var comparer = Comparer<TValue>.Default;
        foreach (var item in source)
        {
            var value = selector(item);
            int compare = comparer.Compare(value, max);

            if (compare > 0 || first)
            {
                max = value;
                withMax = item;
            }
            first = false;
        }
        return withMax;
    }

它只对集合进行一次迭代,这比仅仅为了获得第一项而对其进行排序要快得多。

然后您可以按如下方式使用它

var query =
    from row in table.AsEnumerable()
    group row by row.Field<int>("MOID") into g
    select g.WithMax(r => r.Field<int>("radi"));
于 2010-08-18T22:19:47.550 回答
2

这是未经测试的,但我认为这样的事情应该有效:

        var qry = from m in [YourDataSource]
                      group p by m.MOID into grp
                      select grp.OrderByDescending(a => a.RADI).First();
于 2010-08-18T20:33:01.560 回答
0

这适用于一个查询!

public static T WithMax<T, TValue>(this IEnumerable<T> source, Func<T, TValue> keySelector)
{
    return source.OrderByDescending(keySelector).FirstOrDefault();
}
于 2012-06-01T11:22:04.000 回答