Ваша «проблема» в вашей первой строке. Заданный вами запрос возвращает IOrderedQueryable(Of Inventory)
, который вы пытаетесь присвоить переменной типа IQueryable(Of Inventory)
. Вы не получите ошибку до query.ToList()
благодаря отложенному выполнению. Вы можете разрешить компилятору выводить тип, если в вашем проекте установлено значение option infer, и ваш запрос будет выглядеть примерно так:
Dim query =
From d In ctx.Inventories
Where
(From e In ctx.LastVieweds _
Group e By _
e.ApplicationId, _
e.SomeUserId _
Into g = Group _
Where DfaitEdsId = user _
Order By g.Max(Function(p) p.Id) Descending _
Select ApplicationId Take 5 _
).Contains(d.Id) _
Select d
Или вы можете просто изменить тип query
на IOrderedQueryable(Of Inventory)
Примечание: то, что у вас хорошо работает в Linq to SQL, но сущности гораздо строже, когда дело доходит до приведения.
Изменить:
Хорошо, давайте попробуем углубиться в это. Скажи мне, какая линия взрывается со следующим:
Dim innerList = (From e In ctx.LastVieweds _
Group e By _
e.ApplicationId, _
e.SomeUserId _
Into g = Group _
Where DfaitEdsId = user _
Order By g.Max(Function(p) p.Id) Descending _
Select ApplicationId Take 5).ToList()
Dim query = (From d In ctx.Inventories
Where innerList.Contains(d.Id) _
Select d).ToList()
Не забудьте немного уменьшить результаты, если перечисление запросов с помощью ToList () слишком много. Типы обеих переменных теперь List(Of Inventory)