Сортировка данных, возвращаемых базой данных
В нашем проекте у нас есть требование, что когда набор записей возвращается базой данных, записи должны быть отсортированы по полю TITLE в записи. Записи должны быть отсортированы в алфавитном порядке, но если в названии записи есть номер, то он должен следовать за записями, заголовок которых состоит только из алфавитов.
Подробности: мы используем SQL Server и C#. Данные из базы данных поступают в класс Entity, который перенаправляет данные на другие слои.
Итак, что будет возможным и эффективным решением для этого требования.
1 ответ
Я предполагаю, что у вас есть объект, который содержит данные и имеет свойство TITLE. Рассматривать:
class Entity
{
...
public string TITLE { get; set; }
...
}
Вы можете хранить эти объекты в List<Entity>
и позже, когда вам нужно, позвоните Sort
метод сортировки.
Чтобы сортировка происходила в соответствии с вашими требованиями, предоставьте Comparer
при звонке сортировать. Для получения дополнительной информации см.: http://msdn.microsoft.com/en-us/library/234b841s.aspx.
В Compare(Entity x, Entity y)
Вы можете сравнить оба объекта в соответствии с вашими потребностями.
О сравнении TITLE's
:
Попробуйте этот метод сравнения:
private static int StringComparer(string x, string y)
{
if (!x.AllChar()) return 1;
if (!y.AllChar()) return -1;
return x.CompareTo(y) * -1;
}
public static bool AllChar(this string x)
{
char[] chars = x.ToCharArray();
bool allchar = chars.Any<char>((c) => !char.IsLetter(c));
return !allchar;
}