我需要构造一个按以下顺序输出的字符串列表:
EXA - 粗体文本
EXD - 粗体文本
EXY - 粗体文本
EXZ - 粗体文本
COA - 粗体文本
COD - 粗体文本
COY - 粗体文本
COZ - 粗体文本
经验
执行
.EXE
EXF
玉米芯
COC
特遣队员队伍
首席运营效率
埃克杰
EXK
COJ
库克
"粗体文本"表示我的视图对象上名为"isBold"的属性,并告诉我的视图将这些代码设置为粗体。
我需要保证当我的视图传递这些视图对象的列表时,它们的顺序如上所列,因为我不能保证它们会以正确的顺序从我的数据库中返回。
我可以做类似的事情
List<DeclarationTypeViewObject> e = m_ViewObject.AvailableDeclarationTypes.Where(x => x.Code.StartsWith("E") && x.IsBold).ToList();
UpdateDeclarationTypeViewObject(e, declarationTypeViewObjects);
List<DeclarationTypeViewObject> c = m_ViewObject.AvailableDeclarationTypes.Where(x => x.Code.StartsWith("C") && x.IsBold).ToList();
UpdateDeclarationTypeViewObject(c, declarationTypeViewObjects);
List<DeclarationTypeViewObject> cn = m_ViewObject.AvailableDeclarationTypes.Where(x => x.Code.StartsWith("E") && !x.IsBold).ToList();
UpdateDeclarationTypeViewObject(cn, declarationTypeViewObjects);
依此类推,但是当我尝试将以 C 开头的代码插入以 E 开头的代码之间时,当我到达非粗体代码时,这会变得混乱,而且这种方法感觉非常"黑客",我想要一种更优雅的方式来实现我想要的结果。
我相信DeclarationTypeViewObject
的定义是这样的:
public class DeclarationTypeViewObject
{
public string Code {get; set;}
public bool IsBold {get; set;}
}
您更改以添加Order
属性以从定义的Dictionary
获取订单。这也可以保留在任何存储(如数据库(中
public static class DeclarationType
{
public static Dictionary<string, int> Orders = new Dictionary<string, int>()
{
{"EXA", 1},
{"EXD", 2},
{"EXY", 3},
{"EXZ", 4},
{"COA", 4},
{"COD", 5},
{"COY", 6},
{"COZ", 7},
{"EXB", 8},
{"EXC", 9},
{"EXE", 10},
{"EXF", 11},
{"COB", 12},
{"COC", 13},
{"COE", 14},
{"COF", 15},
{"EXJ", 16},
{"EXK", 17},
{"COJ", 18},
{"COK", 19}
};
}
public class DeclarationTypeViewObject
{
public string Code {get; set;}
public bool IsBold {get; set;}
public int Order {get { return !string.IsNullOrEmpty(this.Code) && DeclarationType.ContainsKey(this.Code) ? DeclarationType.Orders[this.Code] : 100; }}
}
现在,要按正确的顺序获取可用声明类型,请使用以下方法
List<DeclarationTypeViewObject> e = m_ViewObject.AvailableDeclarationTypes.Order(a => a.Order).ToList();
注意 - 如果代码不存在,则代码将顺序返回为 100;您可以相应地更改它以根据业务逻辑返回 const 或抛出的异常。