#c# #sql #entity-framework
#c# #sql #entity-framework
Вопрос:
Я новичок в entity Framework и пытаюсь преобразовать следующий запрос в правильные вызовы функций.
Select Distinct a.nodeId FROM
(SELECT *
FROM reportContents
Where fitId = '29' and reportId =
(select max(reportId)
from reportContents
where fitId = '29')
) a Where (a.nodeId IS NOT NULL)
Я знаю, что этот запрос выполняет то, что я хочу, однако я не уверен, как перевести это в entitiy framework!
Вот была моя попытка.
var prevSelectedNodes = db.reportContents.Where(
f => f.fitId == id).Select(
f => f.nodeId).Distinct().ToList();
Мне нужно как-то поместить .Выберите() в вызове where. Однако такого рода вещи не кажутся возможными
Заранее благодарю вас!
Комментарии:
1. является ли ReportId уникальным (pk)?
2. Похоже, Ksven уже ответил, но мой совет, если вы новичок в EF, постарайтесь не думать об этом как о запросе кучи таблиц. EF состоит из объектов, а не реляционных таблиц.
Ответ №1:
Поскольку вы не можете создать два вложенных лямбда-выражения LINQ. Вы можете сделать это с помощью двух запросов :
var maxReportId = db.reportContents.Where(r => r.fitId = "29").Max(r => r.RepordId);
var result = db.reportContents.Where(r => r.fitId == "29" amp;amp; r.reportId == maxReportId amp;amp; r.nodeId != null).Select(a => a.nodeId).Distinct().ToList() ;
Комментарии:
1. Если вы добавите первый оператор linq во второй оператор, я бы ожидал, что он сгенерирует один оператор SQL.
2. Как написано, это должно быть сделано в одном заявлении. Если первая строка завершалась символом . ToList() это заставило бы его выполняться отдельно. В основном он собирает работу до тех пор, пока что-то действительно не потребует результатов.