C# 需要更漂亮的LINQ到SQL查询的帮助吗

C# 需要更漂亮的LINQ到SQL查询的帮助吗,c#,.net,linq-to-sql,C#,.net,Linq To Sql,以下是AdventureWorks数据库的T_SQL查询: 选择名称 从生产。产品 其中ListPrice>=任何 选择最大标价 从生产。产品 按ProductSubcategory ID分组 我尝试为此编写LINQ查询: var groupMaxPricesquery2 = from product in dc.Products group product by product.ProductSubcateg

以下是AdventureWorks数据库的T_SQL查询:

选择名称 从生产。产品 其中ListPrice>=任何 选择最大标价 从生产。产品 按ProductSubcategory ID分组

我尝试为此编写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;
如何使其更美观,即将这些查询组合在一起,或采用更有效的方法


非常感谢

也许我在分组方面遗漏了一些东西,但我不明白为什么有必要这样做

var maxListPrice = dc.Products.Max(p => p.ListPrice);
var query = dc.Products.Where(p => p.ListPrice >= maxListPrice).Select(n => n.Name);

也许我在分组方面遗漏了一些东西,但我不明白为什么有必要这样做

var maxListPrice = dc.Products.Max(p => p.ListPrice);
var query = dc.Products.Where(p => p.ListPrice >= maxListPrice).Select(n => n.Name);

请尝试以下两种方法之一:

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);

请尝试以下两种方法之一:

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);

是的,我很明白你的意思。这里不需要分组。我之所以使用它,是因为我想让我的LINQ查询看起来像T_SQL查询。在T-SQL查询中也不需要它——这只是浪费。你要求一个更漂亮、更有效的方法;我想我两者都提供了。是的,你说得对。你的回答超出了我的预料。我的问题是我只关注查询语法,而不是它的含义。非常感谢你的帮助。是的,我很理解你的意思。这里不需要分组。我之所以使用它,是因为我想让我的LINQ查询看起来像T_SQL查询。在T-SQL查询中也不需要它——这只是浪费。你要求一个更漂亮、更有效的方法;我想我两者都提供了。是的,你说得对。你的回答超出了我的预料。我的问题是我只关注查询语法,而不是它的含义。非常感谢你的帮助,谢谢艾哈迈德。我从你的回答中学到了很多。在第一个查询中,我需要的是let子句。第二个查询使用标准的点表示法语法。在本例中,我发现第一个查询更具可读性。谢谢Ahmad。我从你的回答中学到了很多。在第一个查询中,我需要的是let子句。第二个查询使用标准的点表示法语法。在本例中,我发现第一个查询更具可读性。