优化linq查询以增加

时间:2013-01-16 10:10:31

标签: c# linq datatable

我有以下linq查询搜索相同的数据表,并想知道是否可以进行一次搜索并执行以下for循环以将数据添加到相同的变量,以便它可以使系统更快

var sort = configurationData.AsEnumerable().Where(sorts => sorts.Field<String>("QuestionStartText") == question &&
    sorts.Field<String>("slideNo") == Convert.ToString(slideNumber) )
             .Select(sorted => sorted.Field<String>("SortByColumn")).Distinct().AsParallel();

var rowNeedAfterSort = configurationData.AsEnumerable().Where(sorts => sorts.Field<String>("QuestionStartText") == question &&
    sorts.Field<String>("slideNo") == Convert.ToString(slideNumber))
                 .Select(sorted => sorted.Field<String>("NoOfRows")).Distinct().AsParallel();

var indexs = configurationData.AsEnumerable().Where(sorts => sorts.Field<String>("QuestionStartText") == question &&
    sorts.Field<String>("slideNo") == Convert.ToString(slideNumber))
                 .Select(sorted => sorted.Field<String>("ColumnInExcel")).Distinct().AsParallel();

int p = 0;
int chartValue = 0;

foreach (string inedcies in indexs)
{
    if (inedcies != null)
    {
        if (!inedcies.ToUpper().Equals("NULL"))
        {

            if (inedcies.Contains(','))
            {
                Array.Clear(valuesUsed, 0, valuesUsed.Length);
                string[] index = inedcies.Split(',');
                foreach (string a in index)
                {
                    valuesUsed[p] = Convert.ToInt32(a);
                    p++;
                }
            }
            else if (inedcies.Equals("7"))
            {
                Array.Clear(valuesUsed, 0, valuesUsed.Length);
                valuesUsed[p] = Convert.ToInt32(inedcies);
            }
            else
            {
                chartValue = Convert.ToInt32(inedcies);
            }
        }
    }
}

foreach (string sortedint in sort)
{
    if (sortedint != null)
    {
        if (!sortedint.ToUpper().Equals("NULL"))
        {
            SortData2(sortedint);
            sortedData = "true";
        }
    }
}

foreach (string rows in rowNeedAfterSort)
{
    if (rows != null)
    {
        if (!rows.ToUpper().Equals("NULL"))
        {
            string[] values = rows.Split(' ');
            rowCount = Convert.ToInt32(values[1]);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

清理完以下代码后,您将能够看到如何/在哪里取出foreach循环。

   foreach (string a in index)
        {
            valuesUsed[p] = Convert.ToInt32(a);
            p++;
        }

我们有什么保证index.length < valuesUsed.length

Foreach (x in y)
{ 
if (x != null)
    {
     do something
    }
}

更具可读性。您也不需要在foreach循环中检查元素是否为null。可能需要检查元素的属性,而不是元素本身。

y.Foreach(x => do what you need here)