Ich habe ein Beispiel in der VS2008 Beispiele für Dynamic LINQ, mit dem Sie eine SQL-ähnliche Zeichenfolge verwenden können (z. B. OrderBy("Name, Age DESC"))
für die Bestellung. Leider funktioniert die enthaltene Methode nur bei IQueryable<T>
. Gibt es eine Möglichkeit, diese Funktionalität auf IEnumerable<T>
?
Antworten
Zu viele Anzeigen?
Mike Christiansen
Punkte
1050
Eine alternative Lösung verwendet die folgende Klasse/Schnittstelle. Sie ist nicht wirklich dynamisch, aber sie funktioniert.
public interface IID
{
int ID
{
get; set;
}
}
public static class Utils
{
public static int GetID<T>(ObjectQuery<T> items) where T:EntityObject, IID
{
if (items.Count() == 0) return 1;
return items.OrderByDescending(u => u.ID).FirstOrDefault().ID + 1;
}
}
Francis Shaw
Punkte
71
Sie können dies für mehrere Bestellungen so machen
IOrderedEnumerable<JToken> sort;
if (query.OrderBys[0].IsDESC)
{
sort = jarry.OrderByDescending(r => (string)r[query.OrderBys[0].Key]);
}
else
{
sort = jarry.OrderBy(r =>
(string) r[query.OrderBys[0].Key]);
}
foreach (var item in query.OrderBys.Skip(1))
{
if (item.IsDESC)
{
sort = sort.ThenByDescending(r => (string)r[item.Key]);
}
else
{
sort = sort.ThenBy(r => (string)r[item.Key]);
}
}
user145610
Punkte
2751
BenW
Punkte
1205
Ich kann dies mit dem unten stehenden Code erreichen. Sie müssen keinen langen und komplexen Code schreiben.
protected void sort_array(string field_name, string asc_desc)
{
objArrayList= Sort(objArrayList, field_name, asc_desc);
}
protected List<ArrayType> Sort(List<ArrayType> input, string property, string asc_desc)
{
if (asc_desc == "ASC")
{
return input.OrderBy(p => p.GetType()
.GetProperty(property)
.GetValue(p, null)).ToList();
}
else
{
return input.OrderByDescending(p => p.GetType()
.GetProperty(property)
.GetValue(p, null)).ToList();
}
}
Arindam
Punkte
178
- See previous answers
- Weitere Antworten anzeigen