2013-11-22 1 views
2

У меня есть этот существующий Sql заявление:выражение Linq лямбда для ниже SQL в vb.net

Select Count(ordid),isnull(prcsts,'NOT STARTED') 
from lwp 
where lwp in(Select max(Id) from lwp group by ordid) 
group by prcsts 

Я хочу, чтобы преобразовать использовать LINQ-to-SQL, но я не могу понять, как обрабатывать выражение group by в подзапросе. Как я могу это сделать?

Я использую Entity Framework, где у меня есть способ получить список lwp. Я сделал лишь часть этого.

Entitydb.lwpmethod 
     .GetList 
     .Where(Function(F) F.ID = **Max(Function(O) O.ordid**) 
     .GroupBy(Function(F) F.prcsts) 
     .Select(Function(F) New With {.A = F.Count, .B = F.Key}) 
     .ToList 

Я не могу написать группу по подзапросу в функции max.

+0

'lwp in (max (id))'? Вы уверены, что это сработает? – MarcinJuraszek

ответ

0

Во-первых, это не in, это =, так как max() возвращает один элемент. Также ваш запрос sql имеет lwp в предложении where, вы, вероятно, typo'd id. Имея это в виду, что-то вроде:

.Where(row=>row.ID=Entitydb.lwpmethod.GetList() 
            .Where(r=>r.ordid=row.ordid) 
            .Max(r=>r.ID)) 

Код C#, но вы получаете эту идею.

Кстати, похоже, что он выбирает последнюю строку. Почему бы просто не сортировать по id по убыванию и взять первый элемент?

+0

Спасибо, что это сработало, я был в замешательстве относительно и «=». Я думаю, что лучший подход - использовать первый идентификатор. Я попробую это. Спасибо за совет. – tinku99

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

  • Нет связанных вопросов^_^