C# 将值从列表分配到列表(不包括空值)

C# 将值从列表分配到列表(不包括空值),c#,C#,对不起,这个标题,但我不知道其他的提问方式 编辑以便于解释 public Dictionary<string, string>[] getValuesDB(DataSet ds) { Dictionary<string, string>[] info; Dictionary<string, string>[] temp = new Dictionary<string, string>[ds.Tables[

对不起,这个标题,但我不知道其他的提问方式

编辑以便于解释

public Dictionary<string, string>[] getValuesDB(DataSet ds)
    {

        Dictionary<string, string>[] info; 
        Dictionary<string, string>[] temp = new Dictionary<string, string>[ds.Tables[0].Rows.Count];
        Dictionary<string, string> d;

        string ciclo = "CICLO 02";

        try
        {
            for (int c = 0; c < ds.Tables[0].Rows.Count; c++)
            {
                d = new Dictionary<string, string>();

                OracleConn ora = OracleConn.getInstancia();
                DataSet oraDs = ora.getClientByCycle(ds.Tables[0].Columns["IDCliente"].Table.Rows[c].ItemArray[1].ToString(), ciclo);

                if (oraDs.Tables[0].Rows.Count > 0)
                {
                    oraDs.Tables[0].Columns[5].Table.Rows[0].ToString();
                    d.Add("DomID", ds.Tables[0].Columns["DomID"].Table.Rows[c].ItemArray[0].ToString());
                    d.Add("ClientID", ds.Tables[0].Columns["ClientID"].Table.Rows[c].ItemArray[1].ToString());
                    d.Add("AccountType", ds.Tables[0].Columns["AccountType"].Table.Rows[c].ItemArray[2].ToString());
                    temp[c] = d;
                }
             }

        }
        catch (Exception eo)
        {

        }

        int count = 0;
        for (int i = 0; i < temp.Length; i++)
        {
            if (temp[i] != null)
                count++;
        }

        info = new Dictionary<string, string>[count];

        return info; 
现在我需要从“temp”中获取所有非空值,并将其放入info中 有什么想法吗?试试这个

Dictionary<string, string> dictionaryWithoutNulls ;

dictionaryWithoutNulls = dictionaryWithNulls
                        .Where(d => d.Value != null)
                        .ToDictionary(s=>s.Key, s=>s.Value);
试试这个

Dictionary<string, string> dictionaryWithoutNulls ;

dictionaryWithoutNulls = dictionaryWithNulls
                        .Where(d => d.Value != null)
                        .ToDictionary(s=>s.Key, s=>s.Value);
简单回答 一个简单、直接、不美观的答案,适用于.NET 2.0,并尽可能少地干扰代码:

// ...code
info = new Dictionary<string, string>[count];

// Beginning of new code
int j = 0;
foreach (Dictionary<string, string> fromTemp in temp)
{
    if (fromTemp == null)
        continue;
    info[j] = fromTemp;
    j++;
}
// End of new code

return info;
然后返回值可能类似于IList

2.在循环中查询数据库 我猜ora.getClientByCycle。。。是一个数据库查询。几乎总是可以一起重写查询或批处理查询,这样只需对数据库进行一次往返。即使它是一个快速查询,它仍然可能是这个方法中最慢的一行。查询数据库一次,而不是ds.Tables[0].Rows.Count times

3.吞咽系统。异常 如果数据库查询在某些情况下可能失败,并且您对此没有意见,那么捕获OracleException。始终捕获最具体的异常。否则catch块可能会捕获并忽略您不期望的其他异常。那么你的程序就不能正常运行,你也没有有用的异常信息来帮助你调试它。有关更多信息,请参阅。

简单答案 一个简单、直接、不美观的答案,适用于.NET 2.0,并尽可能少地干扰代码:

// ...code
info = new Dictionary<string, string>[count];

// Beginning of new code
int j = 0;
foreach (Dictionary<string, string> fromTemp in temp)
{
    if (fromTemp == null)
        continue;
    info[j] = fromTemp;
    j++;
}
// End of new code

return info;
然后返回值可能类似于IList

2.在循环中查询数据库 我猜ora.getClientByCycle。。。是一个数据库查询。几乎总是可以一起重写查询或批处理查询,这样只需对数据库进行一次往返。即使它是一个快速查询,它仍然可能是这个方法中最慢的一行。查询数据库一次,而不是ds.Tables[0].Rows.Count times

3.吞咽系统。异常

如果数据库查询在某些情况下可能失败,并且您对此没有意见,那么捕获OracleException。始终捕获最具体的异常。否则catch块可能会捕获并忽略您不期望的其他异常。那么你的程序就不能正常运行,你也没有有用的异常信息来帮助你调试它。有关更多信息,请参阅。

我不确定您的确切要求。您想要一个所有键都具有非空值的新字典吗?不清楚您使用的是什么数据结构。你能发布声明它们的代码吗?你说你有两个字典,但是你的代码显示temp可以用int来索引。请澄清一下。初始化字典的大小不是强制性的,比如数组。另外,当您有LINQ可用时,您不必做所有这些,您有一系列字典,这几乎肯定不是您想要的。你可能想要一本分类词典或者仅仅是一本词典,这取决于顺序是否重要。我不确定你到底在问什么。您想要一个所有键都具有非空值的新字典吗?不清楚您使用的是什么数据结构。你能发布声明它们的代码吗?你说你有两个字典,但是你的代码显示temp可以用int来索引。请澄清一下。初始化字典的大小不是强制性的,比如数组。另外,当您有LINQ可用时,您不必做所有这些,您有一系列字典,这几乎肯定不是您想要的。你可能想要一本SortedDictionary或者仅仅是一本字典,这取决于顺序是否重要。因为它不是为2.0Lol设计的。是否会逐个提取每个非空值?还是我需要一个柜台?@GutierrezDev:你不需要柜台伙伴。dictionaryWithoutNulls只保存旧字典中的keyValuePair,根据您的问题状态,旧字典中的值不为null!!!尝试上述示例,然后尝试此字典,但不使用nulls.Keys.Count;和dictionaryWithoutNulls.Values.Count;因为它不是为2.0Lol设计的。是否会逐个提取每个非空值?还是我需要一个柜台?@GutierrezDev:你不需要柜台伙伴。dictionaryWithoutNulls只保存旧字典中的keyValuePair,根据您的问题状态,旧字典中的值不为null!!!尝试上述示例,然后尝试此字典,但不使用nulls.Keys.Count;和dictionaryWithoutNulls.Values.Count;哇!谢谢这个简单的答案很有效。2-在循环中查询数据库:我知道这可能是最慢的方法,但现在是最快的方法,因为时间太长了。这个项目不是由我开发的,所以我会暂时改变或修复一些东西。3-System.Exception:这是为了简洁,所以我将添加其各自的catch块。再次感谢。哇。谢谢这个简单的答案很有效。2-在循环中查询数据库:我知道这可能是最慢的方法,但现在是最快的方法,因为时间太长了。这个项目不是由我开发的,所以我会暂时改变或修复一些东西。3-System.Ex 异常:这是为了简洁,所以我将添加其各自的catch块。再次感谢。