Как получить Min в C # Linq с объединением и группировкой? - PullRequest
1 голос
/ 04 октября 2019

Я хочу построить запрос Linq для сценария ниже:

Таблица 1

PriceId
ProductId
ProductPrice 
ProductHeight
ProductWeight
ProductType

Таблица 2

ProductId
ProductName

Задача: Выбрать самые дешевые цены и названиядля продуктов, где:

  • productHeight = 5
  • productWeight = 10
  • productTypes: "abc", "xyz"

ожидаемый конечный результат - это список объектов, подобных этому:

ProductId
ProductName
TheCheapestPrice(the cheapest ProductPrice)

Я создал запрос SQL для получения этой информации, однако у меня возникла проблема с записью его в LINQ.

SQL-запрос:

SELECT
    t1.ProductId,
    t2.ProductName,
    MIN(t1.ProductPrice) AS TheCheapestPrice
FROM
    Table1 t1
    INNER JOIN Table2 t2 ON t1.ProductId = t2.ProductId
WHERE
    t1.ProductHeight = 5
    AND
    t1.ProductWeight = 10
    AND
    t1.ProductType IN ('abc', 'xyz')
GROUP BY
    t1.ProductId,
    t2.ProductName

Не могли бы вы помочь мне достичь того же результата в LINQ?

Пока я создал такой LINQ, однако у меня естьпроблема с получением минимальной цены:

from t1 in Table1
where
    productTypes.Contains(t1.ProductType)
    &&
    t1.ProductHeight == 5
    &&
    t1.ProductWeight == 10 
join t2 in Table2 on t1.ProductId equals t2.ProductId
group new { t1.ProductId, t2.ProductName }
by new { t1.ProductId, t2.ProductName } into topPrices
select new 
{
    ProductId = topPrices.Key.ProductId,
    ProductName = topPrices.Key.ProductName,
    TheCheapestPrice = ???
}

1 Ответ

1 голос
/ 04 октября 2019

Вам нужно настроить свою группу так, чтобы она возвращала запись t1, поскольку вы хотите получить доступ к ее свойству ProductPrice:

group t1 by new { t1.ProductId, t2.ProductName } into topPrices

Тогда все, что вам нужно, - это выполнить Min наtopPrices группа, например:

TheCheapestPrice = topPrices.Min(t => t.ProductPrice)

Ссылка на рабочую скрипку.

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...