Запрос Entity Framework Вложенный запрос

#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() это заставило бы его выполняться отдельно. В основном он собирает работу до тех пор, пока что-то действительно не потребует результатов.