gpt4 book ai didi

c# - 返回 Enumerable.Empty().AsQueryable() 是个坏主意吗?

转载 作者:太空狗 更新时间:2023-10-29 21:06:36 29 4
gpt4 key购买 nike

这可能最好用一些代码来解释:

public IQueryable<DatabaseRecord> GetQueryableLinkedRecords()
{
if(this.currentlyHeldIds.Count() == 0)
{
return Enumerable.Empty<DatabaseRecord>().AsQueryable();
}
else
{
return from r in this.DBContext.DatabaseRecords
where this.currentlyHeldIds.Contains(r.Id)
select r;
}
}

如果没有要查询的 currentlyHeldId,则没有理由再次实际查询数据库。如果 currentlyHeldIds 没有值,LINQ to SQL 仍将查询数据库。这种方法有什么问题吗?我意识到一般情况下还有一些与返回 IQueryable 相关的其他问题,但撇开这些论点不谈,尝试像这样绕过 db 调用有什么问题吗?

最佳答案

我认为您应该重新考虑您的函数实际要做什么。如果您要退回 IQueryable<T> , 那么这意味着调用者将存储结果查询,并在他们实际执行查询时收到最新的结果。请记住:在这种情况下,直到 .ToList() 才会真正查询数据库。 , .ToArray() , foreach等在查询中被调用。

但是,如果您的目标是返回查询的当前状态,那么您的方法应该只返回一个 IList<T>。或类似的规定。然后,您可以返回一个空的 List<T> , 或调用 .ToList()在您以其他方式构建并返回的查询上。

一般来说,我会尽量避免返回空的可查询对象,因为它会误导调用者他们实际得到的是什么。

关于c# - 返回 Enumerable.Empty<T>().AsQueryable() 是个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6220990/

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