我正在尝试获得列表的降序顺序,然后按降序列表进行分组。但是我不知道为什么查询不起作用。
List<RentBillRegister> result = _dbContextRent.RentBillRegisters.Where(x => x.Month == month && x.BillId != null).OrderByDescending(c => c.Id)
.GroupBy(c => c.ClientId)
.SelectMany(grouping => grouping.Take(1))
.ToList();
它返回的结果是,分组之前没有对列表进行描述。分组时,我只需要最少的ID。
即使我只是尝试使用此查询查看desc结果。
var result = _dbContextRent.RentBillRegisters.Where(x => x.Month == month && x.BillId != null).OrderByDescending(c => c.Id).ToList();
但是它也在返回升序列表。有人可以解释吗?
答案 0 :(得分:0)
因此,我尝试了一下,并编写了最简单的示例进行尝试,由于某种原因,OrderByDesc无法与字符串配合使用,可能需要提供一个比较器来确定哪个比另一个大。因此,如果您输入Id是一个字符串,那就是问题所在。我尝试了相同的示例,但使用了整数,并且按预期工作。 一个简单的解决方案是使用orderBy中的Convert.ToInt32将ID转换为int。当然,仅当ID仅包含数字时,这才有意义,如果其中包含字母,则必须使用另一种技术对它们进行排序。
希望这会有所帮助!
代码示例正常工作:
List<string> list = new List<string>() { "5", "2", "1", "10" };
list.OrderByDescending(item => Convert.ToInt32(item)).ToList().ForEach(itemOrdered => teResult.Text += " " + itemOrdered.ToString());