更好的数据库查询来检索嵌套值

时间:2011-03-03 17:07:40

标签: c# sql-server sql-server-2008 linq-to-entities

我正在尝试使用LINQ to Entities从我的数据库中检索一些数据。 (我最终使用数据来创建使用新的ASP.NET MVC3 ChartHelper的图表。)

作为此项的一部分,用户传入两个字符串,这些字符串是他对X轴和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 个答案:

答案 0 :(得分: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的查询,那么,我无能为力,因为这不在您的问题中。