2013-07-18 2 views
0

У меня есть этот запрос будет необходимо преобразовать в LINQ к сущностиЗапишите этот SQL запрос в LINQ к формату Entity

select kv.KeyID, kv.KeyVotID, v.VotID, v.FullName 
from E_KeyVot kv 
join E_Vot v 
on kv.VotID = v.VotID 
where kv.KeyID=2 
order by v.FullName 

Это то, что я пытался, но я уверен, что это не правильно:

Public Function GetKeyVot() As IQueryable(Of Ems_KeyVot) 
    Try 
    Dim _objQuery As IQueryable(Of Ems_KeyVot, Ems_Vot) = _ 
     From a In Context.Ems_KeyVot 
     Join b In Context.Ems_Vot On a.votid Equals b.votid 
     Where a.keyid = pub_KeyID 
     Order By b.FullName 
    Return _objQuery 
    Catch ex As Exception 
    End Try 
End Function 
+0

Если вы покажете, что вы пробовали до сих пор, скорее всего, получите больше ответов. Этот запрос относительно прямолинейный, поэтому вам не нужно слишком много беспокоиться об этом. –

+0

Это то, что я пытался, но я уверен, что это не правильно: Public Function GetKeyVot() As IQueryable (Of Ems_KeyVot) Попробуйте Dim _objQuery As IQueryable (Of Ems_KeyVot, Ems_Vot) = _ С в контексте. Ems_KeyVot Регистрация Ь В Context.Ems_Vot На a.votid Равно b.votid Где a.keyid = pub_KeyID Заказывайте b.FullName Возвращение _objQuery Поймайте бывший в качестве исключения End Try End Function – adscnet

ответ

0

Исходя из вашего запроса, проблема заключается в том, что ваши типы возвращаемых данных не согласуются с запросом. Запрос возвращает IQueryable (Of Ems_KeyVot, Ems_Vot), но ваша функция ожидает IQueryable (Of Ems_KeyVot).

В запросе вы проецируете значения из обеих таблиц. Так как вы не можете вернуть анонимного типа из вашей функции, вам нужно создать еще один класс, чтобы вернуть результаты:

Public Class Votes 
    Public Property KeyID As Integer 
    Public Property KeyVotID As Integer 
    Public Property VotID As Integer 
    Public Property FullName As String 
End Class 

С, что вы можете изменить ваш запрос следующим образом:

Dim _objQuery As IQueryable(Of Ems_KeyVot, Ems_Vot) = _ 
    From a In Context.Ems_KeyVot 
    Join b In Context.Ems_Vot On a.votid Equals b.votid 
    Where a.keyid = pub_KeyID 
    Order By b.FullName 
    Select New Votes With { .KeyID = a.KeyID, .KeyVotID = a.KeyVotID, .VotID = b.VotID, .FullName = b.FullName } 

Также изменить определение функции для

Public Function GetKeyVot() As IQueryable(Of Votes) 

Еще одно замечание, я вижу, что у вас есть попытка поймать блок, но вы ничего за исключением не делает. Если вы не можете обработать исключение, удалите блок и дайте ему подпрыгнуть к чему-то, что может.

+0

Я дону Не понимаю, почему я должен создать класс голосов? – adscnet

+0

Поскольку вы не возвращаете значения только из одной таблицы или другой, вам нужно спрогнозировать анонимный тип из вашего запроса. Однако вы не можете передавать анонимный тип в результате своей функции, потому что вы не можете назвать его (это анонимно). В результате вам нужно создать проект, который вы можете назвать (Голоса). –

+0

Это не сработало Я получаю сообщение об ошибке в строке контекста «Ems_KeyVot» не является членом System.Web.HttpContext. Также почему они анонимны? все свойства в классе голосов, которые вы предлагаете, - это существующие свойства в других двух объектах/таблицах KeyVot & Vot. Я не могу опубликовать более подробную информацию в ее номере Количество символов ограничено Плз проверить мой блог Я отправил детали сущности Я имею дело с надеждой будет более ясным: http://ahmad0darwiche.blogspot.com/2013 /07/linq-to-entity-error.html – adscnet

Смежные вопросы