【问题标题】:LINQ query to find average cost per item by regionLINQ 查询按地区查找每件商品的平均成本
【发布时间】:2017-04-28 01:57:52
【问题描述】:

我有一个 winforms 应用程序和一个由商店数据和商品销售数据组成的数据库。在从数据库检索到的数据中,我想使用 LINQ 过滤生成的对象集合。我需要什么 LINQ 查询来加入 ShopItemSale 对象并查询它们以按区域选择组和每个项目的平均成本?

Shop.cs
StoreId
Name
Region

ItemSale.cs
Name
Cost
Region

所需输出:

Region Name | Average Item cost
Region1     | 22.50
Region2     | 15.30
Region3     | 15.90

【问题讨论】:

    标签: linq


    【解决方案1】:

    我喜欢在使用连接时使用 linq 表达式查询。

    var querySelect =
        from r in Shop
        join i in ItemSale on r.Region equals i.Region
        select new
        {
            Region = r.Region,
            ItemCost = r.Cost
        };
    

    我发现对组使用 lambda linq 查询更容易

    var queryGroup = querySelect
        .GroupBy(m => new { m.Region }
        .Select(m => new
        {
            Region = m.Key.Region,
            AverageItemCost = m.Average(x => x.ItemCost)
        };
    

    您可以同时执行这两个查询,但我认为将它们作为两个单独的查询会更容易理解,并且将它们组合起来并没有显着的性能提升。

    【讨论】:

    • 查询是在应用层生成的。一旦你在查询上调用.ToList(),它就会在你的 SQL Server 上执行。因此,应用程序在一个查询中执行所有这些操作并没有真正的性能提升,因为一旦它访问您的 SQL Server,它只是一个查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多