есть модель
public class Model
{
public int Id {get;set;}
public string Title {get;set;}
public double Price {get;set;}
public DateTime FinishSelDate {get;set;}
}
функция которая вычитает данные с БД по модели (подробности опускаю)
public List<ModelDTO> GetData()
{
return context.ModelRepository.Read()// Прочитает все модели из БД
.OrederBy(m => m.Title) // Отсортирует оп убываню по названию
.Select(t => new ModelDTO
{ //TODO
})
.ToList();
}
Можно как-то написать универсальную функцию для сортировки любого поля???
хотелось бы вроде такого что-то:
public List<ModelDTO> GetData(Dictionary<string,string> sort){//TODO}
где sort
- {"Title","Asc"}
- поле и как сортировать
Т. е. вопрос в том, как потом эту стрингу
- Title
впихнуть в OrderBy
???
Подключите в NuGet System.Linq.Dynamic.
Добавляете его в using и в коде сможете использовать конструкцию типа
public List<ModelDTO> GetData(string property, string orderType)
{
return context.ModelRepository.Read()
.OrederBy(property + " " + orderType)
.Select(t => new ModelDTO
{ //TODO
})
.ToList();
}
orderType значения "ASC" или "DESC"
Если надо несколько сортируемых параметров, то их следует сформировать в строку через запятую (например "поле1 DESC, поле2 ASC")
public static string GetReflectedPropertyValue(this object subject, string field)
{
object reflectedValue = subject.GetType().GetProperty(field).GetValue(subject, null);
return reflectedValue != null ? reflectedValue.ToString() : "";
}
использование
List<Person> persons = new List<Person>();
persons.Add(new Person("Вася", 12, "4Б"));
persons.Add(new Person("Петя", 12, "11А"));
persons.Add(new Person("Галя", 19, "11А"));
persons.Add(new Person("Анна", 15, "6А"));
var result2 = persons.OrderByDescending(p => p.GetReflectedPropertyValue("Age")).ToList();
public void SortBy(string field, ListSortDirection type)
{
var propertyInfo = typeof(Student).GetProperty(field);
students = type == ListSortDirection.Ascending ? students.OrderBy(x => propertyInfo.GetValue(x, null)).ToList() : students.OrderByDescending(x => propertyInfo.GetValue(x, null)).ToList();
}
Использование
persons.SortBy("Age", ListSortDirection.Ascending);
Еще один метод сортировки через Expression tree
private static IEnumerable<T> GetSortedData<T>(IQueryable<T> list, string sortColumnName)
{
var type = typeof(T);
var property = type.GetProperty(sortColumnName);
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.Property(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderBy", new[] { type, property.PropertyType }, list.Expression, Expression.Quote(orderByExp));
return (IEnumerable<T>)Expression.Lambda(resultExp).Compile().DynamicInvoke();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Возникла проблема, не могу подключить библиотеку к своему проектуВ ссылках проекта она не появляется
Есть такой файл TXT (картинка ниже)Мне нужно как то сделать так, чтобы в базу DATAGRIDVIEW записывалась строка, у которой начало строки начинается...
Столкнулся с такой проблемойЕсть в xaml такая разметка:
У меня есть некоторый UILabel titleLabel, который инициализируется в конструкторе, Frame же указывается в LayoutSubview