我正在尝试使用LINQ to Entities从我的数据库中检索一些数据。 (我最终使用数据来创建使用新的ASP.NET MVC3 ChartHelper的图表。)
作为此项的一部分,用户传入两个字符串,这些字符串是他对X轴和Y轴数据感兴趣的字段的名称。例如,“成本”与“时间”。然后我必须建立数据集,以便将其传递给ChartHelper。但是,检索数据似乎相当笨重,我希望有更好的方法来做到这一点。这就是我现在正在做的事情。 (objectiveX
和objectiveY
是表示类型名称的字符串。)
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”实际上只添加一个值。我宁愿从一个选择中一举获得所有的价值。我知道这是可能的,但我似乎无法做对。
答案 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
的查询,那么,我无能为力,因为这不在您的问题中。