Лучший запрос к базе данных для получения вложенных значений - PullRequest
0 голосов
/ 03 марта 2011

Я пытаюсь получить некоторые данные из моей базы данных, используя 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» действительно добавляет только одно значение.Я бы предпочел просто получить все значения одним махом из одного выбора.Я знаю, что это возможно, но я не могу понять это правильно.

1 Ответ

1 голос
/ 04 марта 2011

Из вашего вопроса не ясно, какие типы, например, 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, я не могу помочь, так как это не в вашем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...