2015-08-26 8 views
0

Я пытаюсь преобразовать вышеуказанный оператор в LINQ. У меня есть несколько таблиц (с идентификатором в первом столбце), и мне нужно «размножить» их, чтобы я получил таблицу в результате, где показаны все возможные комбинации (например, таблица 1 = 2 строки, таблица 2 = 2 строки , таблица 3 = 2 строки, итоговая таблица 2 * 2 * 2 = 8 строк).Выберите * С tab1, tb2, tb3 и т. Д. В LINQ

Если у меня есть БД SQLite, я использовал, чтобы сделать это таким образом:

string sql = "SELECT * FROM tab1,tab2,tab3; 
SQLDataAdapter adapter = new SQLiteDataAdapter(sql, con); 
adapter.Fill(ds.Tables[1]); 

Теперь дб больше не является БД SQLite, но набор данных. Этот набор данных содержит tab1, tab2, tab3 и т. Д. Теперь я хотел бы сделать то же самое, что и раньше, - умножьте таблицы. Как это можно сделать с помощью набора данных (используя LINQ, если это возможно)?

ответ

0

В выражении запроса LINQ вам просто нужно несколько статей from, например.

var query = from row1 in tab1 
      from row2 in tab2 
      from row3 in tab3 
      select new { row1, row2, row3 }; 

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

Для наборов данных, вы, вероятно, хотите что-то вроде:

var query = from row1 in ds.Tables["tab1"].AsEnumerable() 
      from row2 in ds.Tables["tab2"].AsEnumerable() 
      from row3 in ds.Tables["tab3"].AsEnumerable() 
      select new { row1, row2, row3 }; 

Убедитесь, что вы есть using директиву System.Data так что вы можете тянуть в DataTableExtensions для AsEnumerable.

+0

Большое спасибо за ваш быстрый ответ! Это более или менее, как я уже это сделал. К сожалению, я не могу обработать результат ;-). Результат (запрос) должен быть добавлен к существующему набору данных в качестве новой таблицы, но я не знаю, как это сделать. – derchrome

+0

@derchrome: Вероятно, вам нужно создать таблицу со всеми нужными столбцами и создать новые строки с этими значениями. К сожалению, вы не спрашивали об этом в этом вопросе. Я предлагаю вам оставить этот вопрос так, как это было раньше (откат вашего редактирования, который в основном спрашивает, на что вы на самом деле заинтересованы в качестве запоздалой мысли) и задайте * новый вопрос, который объясняет, с какими проблемами вы сталкиваетесь при создании новый стол. Обратите внимание, что когда вы получаете данные из этой новой таблицы, это не имеет значения - это может быть просто список ... –

+0

Спасибо Jon. Тем временем я попробовал немного, и нашел решение для этого. Возможно, это не лучший, но он работает :-) Я помещаю результат в список и в этом списке добавляю разные строки в одну большую строку. – derchrome