Нужна помощь для более красивого запроса LINQ to SQL - PullRequest
1 голос
/ 03 февраля 2010

Ниже приведен запрос T_SQL для базы данных AdventureWorks:

SELECT Name<br> FROM Production.Product<br> WHERE ListPrice >= ANY<br> (SELECT MAX (ListPrice)<br> FROM Production.Product<br> GROUP BY ProductSubcategoryID)

Я пытаюсь написать запрос LINQ для этого:

        var groupMaxPricesquery2 = from product in dc.Products
                                   group product by product.ProductSubcategoryID into productGroup
                                   select productGroup.Max(eachProductInGroup => eachProductInGroup.ListPrice);

        var query = from product in dc.Products
                    where groupMaxPricesquery2.Any(listPrice => listPrice <= product.ListPrice)
                    select product.Name;

Как я могу сделать его более красивым (т. Е. Объединить эти запросы вместе или использовать более эффективный подход)?

Большое спасибо

Ответы [ 2 ]

1 голос
/ 03 февраля 2010

Попробуйте любой из этих способов:

var query = from product in dc.Products
            let groupMaxPricesQuery = dc.Products.GroupBy(p => p.ProductSubcategoryID)
                                                 .Select(g => g.Max(item => item.ListPrice))
            where groupMaxPricesQuery.Any(listPrice => listPrice <= product.ListPrice)
            select product.Name;

// or
var query = dc.Products
              .Select(product => new {
                  Product = product,
                  GroupedMaxPrices = dc.Products.GroupBy(p => p.ProductSubcategoryID)
                                                .Select(g => g.Max(item => item.ListPrice))
            })
            .Where(item => item.GroupedMaxPrices.Any(listPrice => listPrice <= item.Product.ListPrice))
            .Select(item => item.Product.Name);
0 голосов
/ 03 февраля 2010

Может быть, я что-то упускаю в группировке, но не понимаю, зачем это нужно.

var maxListPrice = dc.Products.Max(p => p.ListPrice);
var query = dc.Products.Where(p => p.ListPrice >= maxListPrice).Select(n => n.Name);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...