2016-05-22 3 views
0

Я следующий SQL запрос и пытается преобразовать в LINQКак преобразовать этот подзапрос в Linq?

SELECT * 
FROM 
    (SELECT 
     *, 
     ROW_NUMBER() OVER (PARTITION BY ScannedItemId 
          ORDER BY ScannedDate DESC) AS rn 
    FROM ItemTracking) A 
WHERE 
    A.rn = 1 
    AND ScannedLoc = 1 
ORDER BY 
    ItemTrackingId DESC 

Это возвращает идентификатор элемента, которые находятся в месте (ScannedLoc) в настоящее время.

Я новичок в LINQ и нахожу трудным поместить другие примеры вместе, в частности, в подзапрос и функцию Row_Number.

Может ли кто-нибудь направить меня на правильный путь?

ответ

0

Вы могли бы сделать что-то вроде этого:

var output = (
    from i in ItemTracking 
    group i by i.ScannedItemId into g 
    select g.OrderByDescending(t => t.ScannedDate).First() 
).OrderByDescending(t => t.ItemTrackingId); 

Но я не уверен, что SQL было бы перевести.

+0

Извините, MS T-SQL. Можно ли возвращать анонимный тип? Я попытался .Выберите новый список () {?????}. ToList(), но не был уверен, что положить. – shinya

+0

Синтаксис: '.Select (t => new {Field = t.Field, Etc = etc}). ToList();' – Blorgbeard

+0

Я просто понял, что нет предложения Where ScannedLoc = 1. Если я добавлю его как . Где (t => t.ScannedLoc == 1) перед второй частью OrderByDesending он все равно возвращает все строки. У First() должен быть столбец ScannedLoc, и если он равен 1, верните его. но не уверен, куда его поместить. – shinya

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