2011-03-03 59 views
0

我想從我的數據庫中使用LINQ to Entities檢索一些數據。 (我最終使用這些數據來創建一個使用新的ASP.NET MVC3 ChartHelper的Chart。)更好的數據庫查詢檢索嵌套值

作爲其中的一部分,用戶傳入了兩個字符串,這兩個字符串是他感興趣的X字段的名稱Axis和Y軸數據。例如,「成本」與「時間」。然後我必須建立數據集,以便將它傳遞給ChartHelper。但是,檢索數據似乎相當笨拙,我希望有更好的方法來做到這一點。這就是我現在正在做的事情。 (objectiveXobjectiveY是代表類型名稱的字符串。)

List<double> xValues = new List<double>(); 
List<double> yValues = new List<double>(); 

// First get the data needed to build the chart. 
foreach (Solution solution in this.Solutions) 
{ 
    IEnumerable<double> xVal = from x in solution.SolutionValues 
           where x.TypeName == objectiveX 
           select x.Value; 
    IEnumerable<double> yVal = from y in solution.SolutionValues 
           where y.TypeName == objectiveY 
           select y.Value; 

    xValues.AddRange(xVal); 
    yValues.AddRange(yVal); 
} 

有沒有更好的方式來做到這一點?每個「AddRange」實際上只增加一個值。我寧願只從一個選擇中獲得所有的價值。我知道這是可能的,但我似乎無法做到。

回答

1

從您的問題中不清楚哪些類型,例如solution.SolutionValues的確是。假定它是IQueryable<SolutionValue>,這是你的問題對我來說很有意義的唯一途徑,你可以做一個SQL查詢,然後在內存中分裂它:

var q = (from sv in solution.SolutionValues 
     where sv.TypeName == objectiveX 
      || sv.TypeName == objectiveY 
     select new 
     { 
      TypeName = sv.TypeName, 
      Value = sv.Value 
     }).ToList(); 

IEnumerable<double> xVal = from x in q 
          where x.TypeName == objectiveX 
          select x.Value; 
IEnumerable<double> yVal = from y in q 
          where y.TypeName == objectiveY 
          select y.Value; 

如果你問如何重寫填充this.Solutions查詢但是,我忍不住,因爲那不是你的問題。

+0

謝謝@克雷格。 (+1)我希望有一件事我可以在所有解決方案中進行選擇(不必使用foreach來做這件事,因爲這個(我認爲)是對數據庫的多次調用。是否有任何可能的方法可以做到這一點? – JasCav 2011-03-04 20:07:59

+0

可能,但您不能在您的問題中提供足夠的代碼來回答這個問題,正如我在最後一句中所述。 – 2011-03-04 20:36:59