【问题标题】:LINQ to Entities GroupBy, OrderByDescending, FirstOrDefault whenLINQ to Entities GroupBy, OrderByDescending, FirstOrDefault when
【发布时间】:2016-04-27 08:05:39
【问题描述】:

我在使用 LINQ to Entities 时遇到以下问题。我正在从数据库中选择记录,对它们进行分组,然后按 Id 降序对它们进行排序。然后我想选择第一项,但前提是数量是!= 0。我认为因为我必须使用 FirstOrDefault 我得到错误的结果但不知道如何纠正它。

数据库

现在这个查询会给我 ID 的 2 和 1 分组以及 4“分组”。我需要的是仅当 Quantity 为 != 0 并且不确定如何获得时才选择第一个项目。

data = DbContext.Items.Where(x.WarehouseId == 1)
                .GroupBy(x => x.ItemCode, (key, g) => g.OrderByDescending(y => y.Id).FirstOrDefault())
                .OrderBy(parameters.SortExpression)
                .Skip(parameters.Start)
                .Take(parameters.Length);

如果 WarehouseID 为 1,我只需要返回 ID 为 4 的行。任何帮助表示赞赏。

编辑:首先我需要按 ItemCode 分组,然后我将在上面的案例中有两个组。第一组是 1 和 2,第二组是 4。然后我按 Id 降序对它们进行排序,得到 (2, 1), (4)。然后我需要先从组中选择,但前提是 Quantity 为 != 0。如果 Quantity 为零,我不想从组中选择任何内容。

图片说明我需要什么。我被困在最后一步 Take FristFrom 每组仅当数量为!= 0

【问题讨论】:

    标签: linq sql-server-2008 linq-to-entities


    【解决方案1】:

    编辑:这就是你想要做的:

    var data = DbContext.Items
                .Where(p => p.WarehouseId == 1)
                .GroupBy(p => p.ItemCode, (key, items) => new { Key = key, Items = items, ItemsCountWithQuantityZero = items.Where(p => p.Quantity == 0).Count() })
                .Where(p => p.ItemsCountWithQuantityZero == 0)
                .Select(p => p.Items.OrderByDescending(q => q.Id).First());
    

    【讨论】:

    • 首先我需要按 ItemCode 分组,然后我将在上面的案例中有两个组。第一组是 1 和 2,第二组是 4。然后我按 Id 降序对它们进行排序,得到 (2, 1), (4)。然后我需要先选择,但前提是数量为!= 0。如果数量为零,我不想从组中选择任何东西。
    • 在第二种情况下,当您应该获得 2 和 4 时,您只获得 Ids 1 和 4,看到 2 的数量为 0 并忽略它,因此最后只剩下 4 个。跨度>
    猜你喜欢
    • 2016-11-14
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 2013-09-03
    • 2011-06-29
    相关资源
    最近更新 更多