データセット テーブルがあり、それを columnMOID
でグループ化し、このグループ内で column の最大値を持つ行を選択したいと考えていますradi
。
LINQ to dataset を介してそれを行う方法を誰かに教えてもらえますか?
データセット テーブルがあり、それを columnMOID
でグループ化し、このグループ内で column の最大値を持つ行を選択したいと考えていますradi
。
LINQ to dataset を介してそれを行う方法を誰かに教えてもらえますか?
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"));
これはテストされていませんが、次のようなものが機能するはずです。
var qry = from m in [YourDataSource]
group p by m.MOID into grp
select grp.OrderByDescending(a => a.RADI).First();
これは1つのクエリで機能します!
public static T WithMax<T, TValue>(this IEnumerable<T> source, Func<T, TValue> keySelector)
{
return source.OrderByDescending(keySelector).FirstOrDefault();
}