Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更好的数据库查询以检索嵌套值_C#_Sql Server_Sql Server 2008_Linq To Entities - Fatal编程技术网

C# 更好的数据库查询以检索嵌套值

C# 更好的数据库查询以检索嵌套值,c#,sql-server,sql-server-2008,linq-to-entities,C#,Sql Server,Sql Server 2008,Linq To Entities,我正在尝试使用LINQ to实体从数据库中检索一些数据。(我最终将使用这些数据使用新的ASP.NET MVC3 ChartHelper创建一个图表。) 作为其中的一部分,用户传入两个字符串,这两个字符串是他感兴趣的X轴和Y轴数据字段的名称。例如,“成本”与“时间”。然后,我必须建立数据集,以便将其传递给ChartHelper。然而,检索数据似乎相当笨拙,我希望有更好的方法来实现这一点。这就是我现在正在做的。(objectiveX和objectiveY是表示类型名称的字符串。) List xVal

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

作为其中的一部分,用户传入两个字符串,这两个字符串是他感兴趣的X轴和Y轴数据字段的名称。例如,“成本”与“时间”。然后,我必须建立数据集,以便将其传递给ChartHelper。然而,检索数据似乎相当笨拙,我希望有更好的方法来实现这一点。这就是我现在正在做的。(
objectiveX
objectiveY
是表示类型名称的字符串。)

List xValues=new List();
List yValues=新列表();
//首先获取构建图表所需的数据。
foreach(此.Solutions中的解决方案)
{
IEnumerable xVal=从溶液中的x开始。SolutionValues
其中x.TypeName==objectiveX
选择x值;
IEnumerable yVal=从溶液中的y开始。SolutionValues
其中y.TypeName==objectiveY
选择y值;
xValues.AddRange(xVal);
yValues.AddRange(yVal);
}

有更好的方法吗?每个“AddRange”实际上只增加了一个值。我宁愿从单一选择中一下子获得所有价值。我知道这是可能的,但我似乎无法正确理解。

从您的问题中不清楚解决方案的类型,例如,
解决方案值。假设它是
IQueryable
,这是我理解您的问题的唯一方式,您可以执行一个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;
var q=(来自solution.SolutionValues中的sv
其中sv.TypeName==objectiveX
||sv.TypeName==objectiveY
选择新的
{
TypeName=sv.TypeName,
值=sv.值
}).ToList();
IEnumerable xVal=从x到q
其中x.TypeName==objectiveX
选择x值;
IEnumerable yVal=从y到q
其中y.TypeName==objectiveY
选择y值;

但是,如果您询问如何重写填充此.Solutions的查询,我无法帮助您,因为这不是您的问题。

谢谢@Craig。(+1)有一件事我希望我可以在所有解决方案中进行选择(不必使用foreach,因为这(我认为)是对数据库的多次调用。是否有可能做到这一点?可能,但正如我在最后一句中所评论的,您在问题中没有提供足够的代码来回答这个问题。
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;