0

以下のlinqクエリで同じデータテーブルを検索していますが、システムを高速化できるように、1つの検索を実行し、以下の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]);
        }
    }
}
4

1 に答える 1

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) 
于 2013-01-16T19:00:05.037 に答える