मेरे एप्लिकेशन को अक्सर तालिका को समूहबद्ध करने की आवश्यकता होती है, फिर पंक्ति को उस समूह के अधिकतम मूल्य के साथ वापस कर दें। LINQ में यह करना बहुत आसान है:LINQ - प्रत्येक समूह के लिए अधिकतम मान के साथ पंक्ति प्राप्त करने के लिए एक एक्सटेंशन विधि लिखना
myTable.GroupBy(r => r.FieldToGroupBy)
.Select(r => r.Max(s => s.FieldToMaximize))
.Join(
myTable,
r => r,
r => r.FieldToMaximize,
(o, i) => i)
अब मान लीजिए कि मैं इसे अपनी विधि में जोड़ना चाहता हूं। मैं इस लेखन की कोशिश की:
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);
}
दुर्भाग्य से यह संकलन नहीं करता है: maxKeySelector एक अभिव्यक्ति (ताकि आप r पर यह कॉल नहीं कर सकते है, और तुम भी अधिकतम करने के लिए इसे पारित नहीं कर सकते हैं तो मैं फिर से लिखने की कोशिश की,। maxKeySelector एक समारोह के बजाय एक अभिव्यक्ति बनाने:।
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);
}
अब इस संकलित लेकिन यह कार्यावधि में विफल रहता है: मैं की जरूरत है: "। असमर्थित क्वेरी ऑपरेटर 'मैक्स' के लिए इस्तेमाल किया अधिभार" यह है कि मैं क्या कर रहा हूँ अटक पर है MaxKeySlector को अधिकतम()
कोई सुझाव देने के लिए सही तरीका ढूंढें? मैं हम हूं LINQ से SQL में, जो एक फर्क पड़ता है।
अच्छा, यह निश्चित रूप से अधिक संक्षिप्त है, लेकिन दुर्भाग्य से यह काम नहीं करता है। मुझे पहले की तरह एक ही त्रुटि मिलती है: "असमर्थित अधिभार क्वेरी ऑपरेटर 'ऑर्डरबी' के लिए प्रयोग किया जाता है"। – ctkrohn
@ctkrohn: आप किस LINQ प्रदाता का उपयोग कर रहे हैं? यह LINQ से Entities .... और LINQ से ऑब्जेक्ट्स पर मेरे लिए ठीक काम कर रहा है। – StriplingWarrior
यह एक LINQ से SQL है। – ctkrohn