以非常具体的顺序构造字符串列表



我需要构造一个按以下顺序输出的字符串列表:
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 或抛出的异常。

最新更新