Соединение LINQ с несколькими таблицами — нет результатов

#c# #sql-server #entity-framework #linq

#c# #sql-сервер #entity-framework #linq

Вопрос:

Я пытаюсь использовать LINQ для объединения нескольких таблиц и получения имени метода распространения. У меня есть оператор SQL, который я использовал в качестве основы, который следует.

   select dt.NAME 
  from i_doc.dbo.document as d
  join i_doc.dbo.CONTACT as c
  on c.DOC_ID = d.DOC_ID 
  join i_doc.dbo.RECIPIENT as r
  on r.CONTACT_ID = c.CONTACT_ID 
  join i_doc.dbo.DISTRIBUTION_TYPE as dt
  on dt.DISTRIBUTION_TYPE_ID = r.DISTRIBUTION_TYPE_ID 
  where c.CONTACT_TYPE_ID = 2
  and r.DISTRIBUTION_TYPE_ID != 6
  and d.DOC_ID = 28757
  

Этот конкретный запрос возвращает 1 элемент. Однако код LINQ, который у меня есть, ничего не возвращает. Далее следует код LINQ.

 var distributionMethod = (from d in _documentEntities.DOCUMENTs
                                  join c in _documentEntities.CONTACTs on d.DOC_ID equals c.DOC_ID
                                  join r in _documentEntities.RECIPIENTs on c.CONTACT_ID equals r.CONTACT_ID
                                  join dt in _documentEntities.DISTRIBUTION_TYPE on r.DISTRIBUTION_TYPE_ID equals dt.DISTRIBUTION_TYPE_ID
                                  where c.CONTACT_ID == 2
                                  amp;amp; r.DISTRIBUTION_TYPE_ID != 6
                                  amp;amp; d.DOC_ID == DocID
                                  select dt.NAME).ToList();
  

При попытке определить, что происходит, мы упростили запрос, чтобы проверить, правильно ли выполняется соединение, и протестировали следующий LINQ.

 var test = (from dt in _documentEntities.DISTRIBUTION_TYPE           
                                  select dt.NAME).Take(100);
  

Этот LINQ, var test, приводит к соответствующим значениям.

Мой вопрос: почему мой запрос LINQ метода распределения ничего не возвращает, и что я могу сделать, чтобы это исправить?

Спасибо

Комментарии:

1. Ну, это заставляет меня чувствовать себя глупо ….. Если вы хотите получить кредит за ответ на мою конкретную проблему, не стесняйтесь указывать ответ, и я отмечу его как ответ и завершенный. Спасибо

Ответ №1:

В вашем запросе LINQ вы фильтруете по c.CONTACT_ID , но в запросе SQL вы фильтруете по c.CONTACT_TYPE_ID , так что это просто опечатка.

Комментарии:

1. Если это опечатка, разве вы не должны голосовать за закрытие вместо того, чтобы давать ответ?

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