हां, अगर यह अनुक्रम Story
आइटमों का अनुक्रम है तो काम करना चाहिए; आपकी क्या समस्या हैं? ध्यान दें कि यदि Score
किसी भी उदाहरण पर लागू नहीं होता है, तो यह स्थिर बना सकता है।
दूसरा विकल्प स्कोर() विधि को Story
, या एक एक्सटेंशन विधि पर एक उदाहरण विधि बनाना है।
ध्यान दें कि यह केवल LINQ-to-Objects पर लागू होता है; यदि आप LINQ-to-SQL/LINQ-to-Entities, आदि का उपयोग कर रहे हैं, तो आपको या तो पूरी चीज़ के लिए लैम्ब्डा का उपयोग करने की आवश्यकता है, या (केवल LINQ-to-SQL में) एक यूडीएफ-मैप किए गए फ़ंक्शन का उपयोग करें (डेटा- संदर्भ) मूल्य की गणना करने के लिए।
उदाहरण (LINQ करने वाली वस्तुओं) अपने मूल वाक्य रचना के साथ:
using System.Linq;
using System;
class Story { // declare type
public DateTime PostedOn { get; set; }
// simplified purely for convenience
public int VotesCount { get; set; }
public int CommentsCount { get; set; }
}
static class Program {
static void Main() {
// dummy data
var data = new[] {
new Story { PostedOn = DateTime.Today,
VotesCount = 1, CommentsCount = 2},
new Story { PostedOn = DateTime.Today.AddDays(-1),
VotesCount = 5, CommentsCount = 22},
new Story { PostedOn = DateTime.Today.AddDays(-2),
VotesCount = 2, CommentsCount = 0}
};
var ordered = data.OrderByDescending(s=>Score(s));
foreach (var row in ordered)
{
Console.WriteLine(row.PostedOn);
}
}
private static double Score(Story s) {
DateTime now = DateTime.Now;
TimeSpan elapsed = now.Subtract(s.PostedOn);
double daysAgo = elapsed.TotalDays;
// simplified purely for convenience
return s.VotesCount + s.CommentsCount - daysAgo;
}
}
एक this
(यानी Score(this Story s)
) जोड़ें, और आप का उपयोग कर सकते हैं:
.OrderByDescending(s=>s.Score())
स्रोत
2009-01-14 07:50:08
यह LINQ-to-Objects? या LINQ-to-SQL? एफई? यह एक फर्क पड़ता है। –