1

データセット テーブルがあり、それを columnMOIDでグループ化し、このグループ内で 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;
    }

コレクションを 1 回だけ反復します。これは、最初のアイテムを取得するためだけに並べ替えるよりもはるかに高速です。

その後、次のように使用できます

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

これは1つのクエリで機能します!

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 に答える