在我们的项目中,我们要求当数据库返回一组记录时,记录应该根据记录中的TITLE字段进行排序。记录必须按字母顺序排序,但如果记录的标题中有一个数字,那么它应该在标题只包含字母的记录之后。
详细说明: 我们使用的是SQL Server和c#。来自数据库的数据来自Entity类,它将数据转发到其他层。
那么,这个要求的可行和有效解决方案是什么。
答案 0 :(得分:1)
我将假设您有一个包含数据并具有属性TITLE的对象。考虑:
class Entity
{
...
public string TITLE { get; set; }
...
}
您可以将这些实体存储在List<Entity>
中,稍后在需要时,调用Sort
方法进行排序。
根据您的要求进行排序,在调用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;
}