2013-01-16 96 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)