Ошибка из оператора запроса SQL в методы расширения linq в C # - PullRequest
0 голосов
/ 09 марта 2019

Мне нужна помощь со следующим запросом SQL, чтобы написать в запросе linq или метода расширения, если оба могут предоставить оба примера, было бы здорово для меня.

Этот запрос возвращает последний идентификатор, введенный пользователем, и возвращает идентификатор материала, который мне нужен для моей программы на c #.

SELECT TOP 1
    CASE  
       WHEN s.Material = 'P4861VAPF' THEN 4578
       WHEN s.Material = 'P2871VAPF' THEN 4579
       WHEN s.Material = 'P2231VAPF' THEN 4580
       ELSE NULL 
    END AS MaterialSelected
FROM
    dbo.Shipments s
WHERE
    s.material <> ''
ORDER BY
    s.Id

Я написал этот метод расширения linq в C #, чтобы воссоздать мой SQL-запрос не работает правильно, вместо этого вернуть Id вместо оператора select case

public int GetLastShipmentMaterialEntry()
{
    var lastShipmentMaterialEntry = BarcodeReceivingDbContext.Shipments
            .Where(s => s.Material != "")
            .OrderBy(s => s.Id)
            .Select(s =>
                s.Material == "P4861VAPF" ? 4578 :
                s.Material == "P2871VAPF" ? 4579 :
                s.Material == "P2231VAPF" ? 4580 : 0)                
            .FirstOrDefault();

    return lastShipmentMaterialEntry;
}

Я видел другие примеры запросов из другого вопроса здесь, в переполнении стека и в Google, но не в точности моего текущего запроса. Я также попытался использовать linqpad, чтобы посмотреть, сможет ли он перевести его, но не повезло, поэтому любая помощь приветствуется.

1 Ответ

1 голос
/ 10 марта 2019

Я смог заново создать свой SQL-запрос, используя методы расширения Linq, если кто-то подумает и увидит лучшее решение, пожалуйста, дайте мне знать.

        public int GetLastShipmentMaterialEntry()
        {
            var lastShipmentMaterialEntry = BarcodeReceivingDbContext.Shipments
                .Where(s => s.Material != "")
                .OrderByDescending(s => s.Id)
                .Select(s =>
                    s.Material == "P4861VAPF" ? 4578 :
                    s.Material == "P2871VAPF" ? 4579 :
                    s.Material == "P2231VAPF" ? 4580 : 0)               
                .FirstOrDefault();

            return lastShipmentMaterialEntry;
        }
...