gpt4 book ai didi

c# - 最大还是默认?

转载 作者:IT王子 更新时间:2023-10-29 03:30:35 26 4
gpt4 key购买 nike

从可能不返回任何行的 LINQ 查询中获取最大值的最佳方法是什么?如果我这样做

Dim x = (From y In context.MyTable _
Where y.MyField = value _
Select y.MyCounter).Max

当查询没有返回任何行时,我得到一个错误。我可以做

Dim x = (From y In context.MyTable _
Where y.MyField = value _
Select y.MyCounter _
Order By MyCounter Descending).FirstOrDefault

但是对于这样一个简单的请求来说感觉有点迟钝。我是否缺少更好的方法?

更新:这是背景故事:我正在尝试从子表中检索下一个资格计数器(遗留系统,不要让我开始......)。每个患者的第一个合格行始终为 1,第二个为 2,依此类推(显然这不是子表的主键)。因此,我正在为患者选择最大现有计数器值,然后将其加 1 以创建新行。当没有现有的子值时,我需要查询返回 0(因此添加 1 将使我的计数器值为 1)。请注意,我不想依赖子行的原始计数,以防遗留应用程序在计数器值中引入间隙(可能)。试图让问题过于笼统是我的错。

最佳答案

由于 DefaultIfEmpty 未在 LINQ to SQL 中实现,我搜索了它返回的错误并找到了 fascinating article处理聚合函数中的空集。总结一下我发现的内容,您可以通过在您的选择中强制转换为可为 null 来绕过此限制。我的 VB 有点生疏,但我认为应该是这样的:

Dim x = (From y In context.MyTable _
Where y.MyField = value _
Select CType(y.MyCounter, Integer?)).Max

或者在 C# 中:

var x = (from y in context.MyTable
where y.MyField == value
select (int?)y.MyCounter).Max();

关于c# - 最大还是默认?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/341264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com