데이터 집합 테이블이 있는데 열을 MOID
으로 그룹화하고이 그룹 내에서 최대 값이 radi
인 행을 선택하려고합니다.Linq 데이터 값 집합 행의 최대 값을 기반으로 행을 선택하십시오
누구나 LINQ to dataset을 통해이 작업을 수행 할 수 있습니까?
데이터 집합 테이블이 있는데 열을 MOID
으로 그룹화하고이 그룹 내에서 최대 값이 radi
인 행을 선택하려고합니다.Linq 데이터 값 집합 행의 최대 값을 기반으로 행을 선택하십시오
누구나 LINQ to dataset을 통해이 작업을 수행 할 수 있습니까?
이 안된하지만이 같은 일을해야 생각한다, 그것은 하위 최적 배리에 의해 게시 솔루션 (약간 수정에) 작동합니다
var qry = from m in [YourDataSource]
group p by m.MOID into grp
select grp.OrderByDescending(a => a.RADI).First();
있지만 : 당신이 필요하지 않습니다 컬렉션을 정렬하여 필드의 최대 값을 가진 항목을 찾습니다.
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;
}
그것은 한 번만 컬렉션을 반복 처리, 단지 첫 번째 항목을 얻을 수를 정렬하는 것보다 훨씬 빠르다 : 나는 지정된 함수의 최대 값으로 항목을 반환하는 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"));
이 하나 개의 쿼리와 함께 작동을 다음과 같이
그런 다음 그것을 사용할 수 있습니다!
public static T WithMax<T, TValue>(this IEnumerable<T> source, Func<T, TValue> keySelector)
{
return source.OrderByDescending(keySelector).FirstOrDefault();
}
그것은 OrderByDescending하지있는 OrderBy해야한다 (또는 RADI의 최소 값으로 행을 반환합니다) –
@Thomas - 감사합니다 그 지적에 대해 - 약간의 오타 내 부분에. 나는 내 대답을 수정했다. – codingbadger