如何在C#中的另一个排序列表中添加排序列表?

时间:2015-10-16 18:27:56

标签: c# asp.net visual-studio sql-server-2008 sortedlist

我收到此错误,因为我在SortedList中有一个重复的键。

  

项目已添加。键入字典:'V22.1'键被添加:'V22.1'

但这些重复键的值不同。所以我想在前面的重复键之前添加另一个对象以便找到它的值。我在考虑将SortedList放在SortedList中。举例说明我的意图:

(key)"ICD9" : (key)"V22.1" : (value)"Supervision of other normal pregnancy"
(key)"ICD10" : (key)"V22.1" : (value)"Motorcycle passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident"

我希望这是有道理的。我在考虑做这样的事情:

    SortedList<string, SortedList<string, string>> slCodes;
    slCodes = new SortedList<string, SortedList<string, string>>();

但我现在陷入困境的部分是如何添加到SortedList中的SortedList?我被困在这里:

    strDesc = tbDesc.Text.Trim();
    tblCodes = new DataTable();
    GetCodesByDescription(strDesc, ref tblCodes); //<--This queries from database
    DataView dvCodes = new DataView(tblCodes);

    dvCodes.RowFilter = "CodeType='ICD10' OR CodeType='ICD9'";
    foreach(DataRowView drv in dvCodes)
    {
        slCodes.Add(drv["Code"].ToString().Trim(), //<--Throws error here.
            drv["Description"].ToString().Trim());
    }

这是我目前停留在添加到SortedList中的SortedList的地方。我甚至不确定在密钥中使用键值对的这种方法是否正确。请帮忙。

2 个答案:

答案 0 :(得分:0)

您需要首先检查代码类型以确定要添加到哪个子列表以及是否需要创建新的子列表。

foreach(DataRowView drv in dvCodes)
{
    var codeType = drv["CodeType"].ToString().Trim();
    var code = drv["Code"].ToString().Trim();
    var description = drv["Description"].ToString().Trim();
    if(slCodes.ContainsKey(codeType))
    {
        slCodes[codeType].Add(code, description);
    }
    else
    {
        var subList = new SortedList<string, string>();
        subList.Add(code, description);
        slCodes.Add(codeType, subList);
    }
}

或者,由于您只需提取ICD9和ICD10代码,因此可以预先填充两个子列表

var slCodes = new SortedList<string, SortedList<string, string>>();
slCodes.Add("ICD9", new SortedList<string, string>());
slCodes.Add("ICD10", new SortedList<string, string>());

dvCodes.RowFilter = "CodeType='ICD10' OR CodeType='ICD9'";
foreach(DataRowView drv in dvCodes)
{
    var codeType = drv["CodeType"].ToString().Trim();
    var code = drv["Code"].ToString().Trim();
    var description = drv["Description"].ToString().Trim();
    slCodes[codeType].Add(code, description);
}

答案 1 :(得分:0)

slCodes是一个SortedList对象,包含键的字符串和值的SortedList(字符串,字符串),但是您不是要向它添加这些类型;而是2个字符串对象。

您需要添加一个字符串和一个SortedList(字符串,字符串),而不是两个字符串对象。

如果你想在slCodes中为现有的排序列表添加内容,那么你必须首先查找所述列表,然后再添加2个字符串。

编辑:堆栈溢出使&#39;&lt; &GT;&#39;由于某种原因看不见,所以我带括号。