gpt4 book ai didi

.net - IsNull(Max(id)) 的最佳 Linq2Sql 等效项

转载 作者:行者123 更新时间:2023-12-05 00:07:39 24 4
gpt4 key购买 nike

我希望将以下 SQL 转换为 Linq2SQL。

select isnull(max(Id),0) from tbl

即使我将 Id 定义为 Int NOT NULL
我希望能够将默认值为 0,即使表中没有行。

我能想出的最好的可读方法是
var maxId = dc.tbl.Select(row => row.Id)
.ToArray().Union(Enumerable.Range(0, 1)).Max();

但是这种方法需要删除所有数据,一个性能更高但可读性更低的版本是
var maxId = dc.tbl.Select(row => row.Id)
.OrderByDescending(ii => ii).FirstOrDefault();

有没有更好的办法?

最佳答案

我会使用类似下面的东西。

context.Table.Max(row => (Int32?)row.Id) ?? 0

顺便说一句,我认为你的第二个建议比第一个更清楚地说明目的。

更新

我刚刚用 LINQPad 测试了查询。如果 LINQPad 导致查询在代码中不起作用,则您的第二个建议可能是最佳解决方案。
context.Table
.Select(row => row.Id)
.OrderByDescending(id => id)
.FirstOrDefault()

缺点是默认值固定为零。这可以通过以下查询进行更改。
context.Table
.Select(row => (Int32?)row.Id)
.OrderByDescending(id => id)
.FirstOrDefault() ?? 0

需要注意的是,以下内容不起作用,因为 LastOrDefault() LINQ to SQL 不支持。
context.Table
.Select(row => row.Id)
.OrderBy(id => id)
.LastOrDefault()

关于.net - IsNull(Max(id)) 的最佳 Linq2Sql 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1903333/

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