2015-05-04 4 views
0

У меня есть следующий SQL запрос, который нужно преобразовать в LINQ с VB.NETНеобходимо преобразовать SQL-запрос на LINQ

SELECT * 
FROM (SELECT Id 
     ,LocationCode 
     ,LocationName 
     ,ContactName 
     ,ContactEmail 
     ,Comments 
     ,SBUName 
     ,CreatedBy 
     ,CreatedDtm 
     ,ModifiedBy 
     ,ModifiedDtm 
     ,ROW_NUMBER() OVER (PARTITION BY LocationCode ORDER BY ID) AS RowNumber 
FROM testDB) as rows 
    WHERE ROWNUMBER = 1 

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

Я не мог использовать DISTINCT здесь, он все равно принесет все данные, так как CreatedBy/ModifiedBy отличаются.

Используя следующий запрос LINQ, чтобы выбрать все данные, есть ли способ получить записи DISTINCT для LocationCode?

queryLocMaint = From MR In objcontextGSC.TestDB 
           Select MR.Id, 
            MR.LocationCode, 
            MR.LocationName, 
            MR.SBUName, 
            MR.ContactName, 
            MR.ContactEmail, 
            MR.Comments, 
            MR.CreatedBy, 
            MR.CreatedDtm, 
            MR.ModifiedBy, 
            MR.ModifiedDtm() 
+0

Возможный дубликат [Distinct in Entity framework] (http://stackoverflow.com/questions/8536129/distinct-in-entity-framework). В LINQ-to-SQL вы можете сделать то же самое. –

ответ

1

ROW_NUMBER не поддерживается в LINQ, может быть, вы можете использовать этот подход GROUP BY:

Dim q = From mr In objcontextGSC.TestDB 
     Group mr By mr.LocationCode Into LocationCodeGroup = Group 
     Select LocationCodeGroup.OrderBy(Function(mr) mr.Id).First() 

Это занимает первую строку каждого LocationCode-группу упорядоченной по идентификатору.

+0

Спасибо, Тим работал именно так, как мне это нужно. Просто пришлось изменить mr.Id на mr.LocationCode, и он отобразил все, что мне нужно. – user1515742