Как создать синтаксис запроса для нескольких DataTable для реализации оператора IN сервера Sql
Я получил 3-4 таблицы, выполнив мою хранимую процедуру. Теперь они находятся в моем наборе данных.
Я должен поддерживать этот набор данных для нескольких форм, и я не делаю никаких операций DML с этим набором данных.
Теперь этот набор данных содержит 4 таблицы, из которых мне нужно получить некоторые записи для отображения данных. Данные, хранящиеся в таблицах, имеют форму отношения один ко многим.
т.е. в случае транзакций. N записей на запись. Затем эти N записей дополнительно отображаются в M записей 3-й таблицы.
Таблица 1
MAP_ID GUEST_ID DEPARTMENT_ID PARENT_ID PREFERENCE_ID
-------------------- -------------------- -------------------- -------------------- --------------------
19 61 1 1 5
14 61 1 5 15
15 61 2 4 10
18 61 2 13 23
17 61 2 20 26
16 61 40 40 41
20 62 1 5 14
21 62 1 5 15
22 62 1 6 16
24 62 2 3 4
23 62 2 4 9
27 62 2 13 23
25 62 2 20 24
26 62 2 20 25
28 63 1 1 5
29 63 1 1 8
34 63 1 5 15
30 63 2 4 10
33 63 2 4 11
31 63 2 13 23
32 63 40 40 41
35 65 1 NULL 1
36 65 1 NULL 1
38 68 2 13 22
37 68 2 20 25
39 68 2 23 27
40 92 1 NULL 1
Таблица 2
Department_ID Department_Name Parent_Id Parent_Name
-------------------- ----------------------- --------------- ----------------------------------------------------------------------------------
1 Food 1, 5, 6 Food, North Indian, South Indian
2 Lodging 3, 4, 13, 20, 23 Room, Floor, Non Air Conditioned, With Balcony, Without Balcony
40 New 40 SubNew
ТАБЛИЦА 3
Parent_Id Parent_Name Preference_ID Preference_Name
-------------------- ----------------------------------------------- ----------------------- -------------------
NULL NULL NULL NULL
1 Food 5, 8 North Indian, Italian
3 Room 4 Floor
4 Floor 9, 10, 11 First, Second, Third
5 North Indian 14, 15 X, Y
6 South Indian 16 Dosa
13 Non Air Conditioned 22, 23 With Balcony, Without Balcony
20 With Balcony 24, 25, 26 Mountain View, Ocean View, Garden View
23 Without Balcony 27 Mountain View
40 New 41 SubNew
У меня есть эти 3 таблицы, которые связаны каким-то образом, как это.
Таблица 1 будет основной для этих 2 таблиц, т.е. таблицы 2 и таблицы 3.
Мне нужно запросить их как
SELECT Department_Id, Department_Name, Parent_Name FROM Table2 WHERE Department_Id in
(
SELECT Department_Id FROM Table1 WHERE guest_id=65
)
SELECT Parent_Id, Parent_Name, Preference_Name FROM Table3 WHERE PARENT_ID in
(
SELECT parent_id FROM Table1 WHERE guest_id=65
)
Теперь мне нужно использовать эти запросы в DataTables.
Поэтому я использую синтаксис запроса для этого и дошел до этого момента.
var dept_list= from dept in DtMapGuestDepartment.AsEnumerable()
where dept.Field<long>("PK_GUEST_ID")==long.Parse(63)
select dept;
Это должно дать мне список всех отделов, которые имеют идентификатор гостя =63
Теперь я хочу выбрать все отделы_имя и имя_пользователя из таблицы 2, где guest_id=63, т.е. отделы, которые я выбрал выше.
Этот же случай будет использован для Таблицы3.
Пожалуйста, предложите, как это сделать.
Спасибо за то, что сохранили терпение, прочитав мой вопрос.
1 ответ
Хорошо, предположим, у вас есть 3 IEnumerable vars, по одному для каждой таблицы. Ваш первый запрос будет выглядеть так:
var records = from r1 in table1 where r1.GuestId == 63
join r2 in table2 on r1.DepartmentId equals r2.DepartmentId
select r2;
Второй запрос почти такой же, как и первый, объединяясь с таблицей 3 вместо 2.
var records = from r1 in table1 where r1.GuestId == 63
join r3 in table3 on r1.ParentId equals r2.ParentId
select r3;