Форум программистов, компьютерный форум, киберфорум
LINQ
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
25 / 24 / 18
Регистрация: 16.10.2009
Сообщений: 1,163

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

27.06.2016, 15:38. Показов 1541. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые Гуру!
Есть таблица пожаров fires , для каждой записи есть несколько подчиненных записей в таблице detail. В detail есть поле date и status. Необходимо выбрать записи основной таблицы, для которых поле status имеет определенное значение. Запись в подчиненной таблице нужно брать последнюю по времени (по максимальному значению date). Сейчас я использую запрос

SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT
  f.name, f.area, d.status
FROM fire AS f 
LEFT JOIN detail AS d 
     ON d.fireID = f.ID
WHERE  (d.date = ( SELECT MAX(c.date) FROM detail c
                            WHERE (c.fireID = f.ID)
                            GROUP BY c.fireID
                            ORDER BY c.fireID
                          )
             )
Ну и далее из получившейся таблицы (view) делаю выборку по условию status = "завершено".

Как его переписать в LinQ?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.06.2016, 15:38
Ответы с готовыми решениями:

Выбрать из первой таблицы атрибут записи, удовлетворяющей некому условию, и вставить его во вторую
Помогите пожалуйста...Есть две таблицы, к примеру одна заполнена а вторая пуста. Необходимо выбрать из 1 таблицы атрибут...

Выбрать из последовательности чисел те, которые удовлетворяют заданному условию, и суммировать их
Вася хочет выбирать из последовательности чисел те, которые удовлетворяют заданному условию, и суммировать их. Условие такое: при делении...

Выбрать по 1 записи из таблицы 2 для каждой записи из таблицы 1
В таблице Document_Action по несколько записей для некоторых (не для всех) записей из таблицы Payment. Нужно выбрать по 1 из...

4
21 / 22 / 10
Регистрация: 03.07.2014
Сообщений: 398
08.07.2016, 20:36
Подскажите, что означает у Вас выражение:

SQL
1
2
3
4
5
d.date = ( SELECT MAX(c.date) FROM detail c
WHERE (c.fireID = f.ID)
GROUP BY c.fireID
ORDER BY c.fireID
)
d.date - значение поля, а справа - это таблица из НЕСКОЛЬКИХ строк (раз стоит ORDER).

Какой смысл имеет знак равенства, стоящий между ними?
0
25 / 24 / 18
Регистрация: 16.10.2009
Сообщений: 1,163
08.07.2016, 22:32  [ТС]
Основная таблица - это пожары, подчиненная таблица - обследования пожаров. Т.е. для каждого пожара возможно несколько вылетов на обследование состояния пожара. В каждой такой записи обновляется информация о площади пожара, ветре, привлеченных для тушения и , главное, поле "состояние" (продолжается, локализован или ликвидирован). Задача в том, чтобы из подчиненной таблицы выбрать запись последнюю по времени, чтобы узнать состояние пожара.
Select выбирает все записи подчиненной таблицы "обследования", сортирует их по времени (orderby) и берет запись с максимальным временем. Возможно, orderby здесь лишняя, но это надо было посмотреть дополнительно, а времени не было. Выражение MAX - обеспечивает выбор одной записи из нескольких, неважно есть там ORDERBY или нет.
0
21 / 22 / 10
Регистрация: 03.07.2014
Сообщений: 398
08.07.2016, 23:29
Лучший ответ Сообщение было отмечено АТерентьев как решение

Решение

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
'=================================================================================================='
    '                                            PROCEDURE                                             ' 
    '                                          LINQ - Test04                                           '
    '=================================================================================================='
 
    Public Sub LINQ_Test04()
        Dim nr As DataRow
 
        '=================================================================================================='
        '                                    Создание тестовой таблицы                                     '
        '=================================================================================================='
 
        Dim Fire = _
            {New With {Key .Area = "A01", Key .Name = "N01", Key .ID = "F01"}, _
             New With {Key .Area = "A02", Key .Name = "N02", Key .ID = "F02"}, _
             New With {Key .Area = "A03", Key .Name = "N03", Key .ID = "F03"}}
 
        Dim Detail = _
            {New With {Key .FireID = "F01", Key .Status = "Located", Key .Date = #2/4/2016#, Key .ID = "D0101"}, _
             New With {Key .FireID = "F01", Key .Status = "Finished", Key .Date = #12/4/2016#, Key .ID = "F0102"}, _
             New With {Key .FireID = "F02", Key .Status = "Active", Key .Date = #2/4/2016#, Key .ID = "F0201"}, _
             New With {Key .FireID = "F02", Key .Status = "Located", Key .Date = #5/4/2016#, Key .ID = "F0202"}, _
             New With {Key .FireID = "F02", Key .Status = "Finished", Key .Date = #12/4/2016#, Key .ID = "F0203"}, _
             New With {Key .FireID = "F03", Key .Status = "Active", Key .Date = #2/4/2016#, Key .ID = "F0301"}, _
             New With {Key .FireID = "F03", Key .Status = "Located", Key .Date = #5/4/2016#, Key .ID = "F0302"}, _
             New With {Key .FireID = "F03", Key .Status = "Finished", Key .Date = #12/4/2016#, Key .ID = "F0303"}}
 
        '=================================================================================================='
        '                                           LINQ запрос                                            '
        '=================================================================================================='
 
        Dim Q_Res = _
            From RF In Fire _
            Join RD In Detail _
            On _
                RF.ID _
                    Equals _
                RD.FireID _
            Order By RF.ID, RD.Date
 _
            Group
                RF.Name, _
                RF.Area, _
                FireID = RF.ID, _
                DetailID = RD.ID, _
                RD.Status, _
                Dat = CDate(RD.Date) _
            By RF.ID _
 _
            Into Grp = Group, _
                FL = LastOrDefault()
 _
            Select _
                FL.Name, _
                FL.Area, _
                FL.Status, _
                FL.Dat, _
                FL.FireID, _
                FL.DetailID
 
        '=================================================================================================='
        '                                Копирование результатов в DataTable                               '
        '=================================================================================================='
 
        Dim DT As New DataTable
 
        Call DT_Add_Column(DT, "NAME", "STRING")
        Call DT_Add_Column(DT, "AREA", "STRING")
        Call DT_Add_Column(DT, "STATUS", "STRING")
        Call DT_Add_Column(DT, "DATE", "DATETIME")
        Call DT_Add_Column(DT, "FIREID", "STRING")
        Call DT_Add_Column(DT, "DETAILID", "STRING")
 
        For Each It In Q_Res
            nr = DT.NewRow()
 
            nr("NAME") = It.NAME
            nr("AREA") = It.AREA
            nr("STATUS") = It.STATUS
            nr("DATE") = It.DAT
            nr("FIREID") = It.FIREID
            nr("DETAILID") = It.DetailID
 
            DT.Rows.Add(nr)
 
        Next
 
        Call Show_DT(DT, "Modal", "LINQ Test 04")
2
21 / 22 / 10
Регистрация: 03.07.2014
Сообщений: 398
08.07.2016, 23:31
Результаты работы
Миниатюры
Выбрать из основной таблицы записи, для которых подчиненные удовлетворяют условию  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.07.2016, 23:31
Помогаю со студенческими работами здесь

Найти сумму элементов, значения которых удовлетворяют условию
помогите пожалуйста с задачками 1) в двумерном массиве Z - n-строк, m-столбцов. Найти сумму элементов, значения которых...

Переписать в другой файл числа, цифры которых удовлетворяют условию
Входной массив содержит 5-значные целые числа abcde. Поместить в выходной массив только те, у которых a*b=d*e=c Код не работает...

Найти школьников дни рождения которых удовлетворяют заданному условию
Несколько школьников выстроились в шеренгу. Для каждого школьника известен день его рождения. Требуется определить номер: а) первого из...

Напечатать слова из строки, число N символов в которых удовлетворяют условию: 2 < N < 7
В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом...

Найти трехзначные числа, все цифры которых различны и удовлетворяют условию
найти трех значные числа abc , все цифры которых различны и удовлетворяют уравнению a^2-b^2-c^=a-b-c. загвозка в том что бы в файл ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru