Uygulamam sıklıkla bir tabloyu gruplandırmalı, ardından satırı o grup için maksimum değere döndürmelidir. Bu LINQ yapmak oldukça kolaydır:LINQ - Satırı her satır için maksimum değerle elde etmek için bir uzantı yöntemi yazmak
myTable.GroupBy(r => r.FieldToGroupBy)
.Select(r => r.Max(s => s.FieldToMaximize))
.Join(
myTable,
r => r,
r => r.FieldToMaximize,
(o, i) => i)
Şimdi kendi yöntemiyle içine bu soyut istediğinizi varsayalım. , Bu yüzden yeniden çalıştı maxKeySelector bir ifade (böylece r üzerinde diyemezsin, ve hatta Max geçemeyecek. Ne yazık ki bu derleme değil
public static IQueryable<TSource>
SelectMax<TSource, TGroupKey, TMaxKey>(
this IQueryable<TSource> source,
Expression<Func<TSource, TGroupKey>> groupKeySelector,
Expression<Func<TSource, TMaxKey>> maxKeySelector)
where TMaxKey : IComparable
{
return source
.GroupBy(groupKeySelector)
.Join(
source,
g => g.Max(maxKeySelector),
r => maxKeySelector(r),
(o, i) => i);
}
: Bunu yazarken çalıştı maxKeySelector bir işlev yerine bir ifade verme.
public static IQueryable<TSource>
SelectMax<TSource, TGroupKey, TMaxKey>(
this IQueryable<TSource> source,
Expression<Func<TSource, TGroupKey>> groupKeySelector,
Func<TSource, TMaxKey> maxKeySelector)
where TMaxKey : IComparable
{
return source
.GroupBy(groupKeySelector)
.Join(
source,
g => g.Max(maxKeySelector),
r => maxKeySelector(r),
(o, i) => i);
}
Şimdi bu derler Ama zamanında başarısız: Ben gerekir: "sorgu operatörü 'Max' için kullanılan desteklenmeyen aşırı" Bu şaşırıp budur MaxKeySelector'ı Max() içine geçirmek için doğru yolu bulun.
Herhangi bir öneriniz var mı? LINQ to SQL'i bir fark yaratıyor gibi görünüyor. Her şeyden
Bu kesinlikle daha özlü, ancak maalesef işe yaramıyor. Daha önce olduğu gibi hemen hemen aynı hatayı alıyorum: "Sorgulama operatörü 'OrderBy' için desteklenmeyen aşırı yük". – ctkrohn
@ctkrohn: Hangi LINQ sağlayıcısı kullanıyorsunuz? LINQ to Entities ... ve LINQ to Objects için benim için gayet iyi çalışıyor. – StriplingWarrior
Bu bir LINQ to SQL. – ctkrohn