Заполните JOIN в список в одном запросе к базе данных - PullRequest
0 голосов
/ 13 мая 2010

Я пытаюсь получить записи из таблицы «многие» отношения «один ко многим» и добавить их в виде списка к соответствующей записи из таблицы «один».

Я также пытаюсь сделать это в одном запросе к базе данных.

Код, полученный из Linq to Sql - заполнение результата JOIN в список почти достигает ожидаемого результата, но делает один запрос базы данных на запись в таблице «one», что недопустимо. Этот код ошибки здесь:

        var res = from variable in _dc.GetTable<VARIABLE>()
                  select new { x = variable, y = variable.VARIABLE_VALUEs };

Однако, если я выполняю аналогичный запрос, но перебираю все результаты, выполняется только один запрос к базе данных. Этот код достигает всех целей:

        var res = from variable in _dc.GetTable<VARIABLE>()
                  select variable;

        List<GDO.Variable> output = new List<GDO.Variable>();
        foreach (var v2 in res)
        {
            List<GDO.VariableValue> values = new List<GDO.VariableValue>();
            foreach (var vv in v2.VARIABLE_VALUEs)
            {
                values.Add(VariableValue.EntityToGDO(vv));
            }
            output.Add(EntityToGDO(v2));
            output[output.Count - 1].VariableValues = values;
        }

Однако последний код выглядит ужасно чертовски, и это действительно похоже на то, что должно быть выполнимо в одном запросе linq.

Итак, как это можно сделать в одном запросе linq, который выполняет только один запрос к базе данных?

В обоих случаях для таблицы задана предварительная загрузка с использованием следующего кода: _dc = _db.CreateLinqDataContext ();

        var loadOptions = new DataLoadOptions();
        loadOptions.LoadWith<VARIABLE>(v => v.VARIABLE_VALUEs);
        _dc.LoadOptions = loadOptions;

Я использую .NET 3.5, а база данных была сгенерирована с использованием SqlMetal.

1 Ответ

0 голосов
/ 15 мая 2010

Эта ссылка может помочь

http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

Смотрите под операторами соединения. Вам, вероятно, придется перейти от использования синтаксиса расширения к другому синтаксису. Вот так

var = from obj in dc.Table
      from obj2 in dc.Table2
      where condition
      select 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...