LINQ to Entities GroupBy,OrderByDescending,FirstOrDefault when

时间:2016-04-27 08:05:39

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

LINQ to Entities存在以下问题。我从DB中选择记录,对它们进行分组,然后通过Id降序对它们进行排序。然后我想选择第一项,但只有当数量是!= 0.我想因为我必须使用FirstOrDefault我得到错误的结果但不知道如何纠正它。

DB

enter image description here

现在这个查询会给我ID 2和1分组和4“分组”。我需要的是只有当数量是!= 0时才选择FIRST项目,我不知道如何获得它。

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的行。任何帮助表示赞赏。

编辑:首先我需要groupBy ItemCode,然后我将在上面的案例中有两个组。第一组为1和2,第二组为4。然后我通过Id降序来命令它们,我得到(2,1),(4)。然后我需要先从组中选择,但仅当数量为!= 0.如果数量为零,我不想从组中选择任何内容。

图片澄清我需要什么。我坚持到最后一步只有当数量为!= 0

时才从每个组中取出FristFrom

enter image description here

1 个答案:

答案 0 :(得分:0)

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

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