मैं एक नकली डेटा स्रोत बना रहा हूं जिसे मैं SortExpressions की सूची में पास करने में सक्षम होना चाहता हूं।एकाधिक फ़ील्ड द्वारा सॉर्ट करने के लिए मैं linq का उपयोग कैसे कर सकता हूं?
public SortExpression(string name, SortDirection direction)
{
this.name = name;
this.direction = direction;
}
जॉन स्कीट के कोड और भी पूरे वर्ग के साथ अद्यतन। GetData() केवल ऑब्जेक्ट को एक्स रिकॉर्ड्स के साथ पॉप्युलेट कर रहा है।
public class Data
{
public int Id { get; set; }
public Guid gId { get; set; }
public string Name { get; set; }
public string Phone { get; set; }
public string Address { get; set; }
public DateTime Created { get; set; }
public string SortMe { get; set; }
public static List<Data> GetFakeData(int start, int numberToFetch, IList<SortExpression> sortExpressions, IList<FilterExpression> filterExpressions, out int totalRecords)
{
DataCollection items = GetData();
IEnumerable<Data> query = from item in items select item;
bool sortExpressionsExist = sortExpressions != null;
if (sortExpressionsExist)
{
// Won't be read in the first iteration; will be written to
IOrderedEnumerable<Data> orderedQuery = null;
for (int i = 0; i < sortExpressions.Count; i++)
{
// Avoid single variable being captured: capture one per iteration.
// Evil bug which would be really hard to find :)
int copyOfI = i;
// Tailor "object" depending on what GetProperty returns.
Func<Data, object> expression = item =>
item.GetType().GetProperty(sortExpressions[copyOfI].Name);
if (sortExpressions[i].Direction == SortDirection.Ascending)
{
orderedQuery = (i == 0) ? query.OrderBy(expression)
: orderedQuery.ThenBy(expression);
}
else
{
orderedQuery = (i == 0) ? query.OrderByDescending(expression)
: orderedQuery.ThenByDescending(expression);
}
}
query = orderedQuery;
}
bool filterExpressionsExist = filterExpressions != null;
if (filterExpressionsExist)
{
foreach (var filterExpression in filterExpressions)
{
query.Where(item => item.GetType().GetProperty(filterExpression.ColumnName).GetValue(item, null).ToString().Contains(filterExpression.Text));
}
}
totalRecords = query.Count();
return query.Skip(start).Take(numberToFetch).ToList<Data>();
}
}
कुछ भी नहीं कर रहा प्रतीत होता है। संकलन, कोई त्रुटि नहीं, बस कोई तरह नहीं। कोई विचार?
हाँ, यह कारण है कि मैं foreach के बजाय पाश के लिए कर रहा हूँ है, क्योंकि मैं सोच रहा था कि मुझे वहां कुछ जगह चाहिए। – rball
मैंने अभी तक एक बग तय कर लिया है - आपको कॉपीऑफआई भाग की आवश्यकता है अन्यथा गलत वैरिएबल कैप्चर किया जाएगा! –
बकवास, अभी भी काम नहीं कर रहा है। – rball