2013-01-16 93 views
0

我有下面的LINQ查詢搜索同一個數據表,並想知道是否有可能做一個搜索,並做下面的循環來添加數據到相同的變量,使它可以使系統更快。優化LINQ查詢到incres

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

一旦你清理了下面的代碼,你將能夠看到如何/在哪裏你可以取出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)