大佬教程收集整理的这篇文章主要介绍了c# – 这个SingleOrDefault()优化是否值得,还是过度/有害?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
因此,假设您想要保护自己免受大量意外退回,以下代码段是否有用或者是一个坏主意?
// SingleType is my LinqTosql generated type // Singles is the table that contains many SingleType's // context is my datacontext public SingleType getSingle(int id) { var query = from s in context.Singles where s.ID == id SELEct s; var result = query.Take(2).SingLeorDefault(); return result; }
与通常的做法相反(注意没有.Take(2))
public SingleType getSingle(int id) { var query = from s in Singles where s.ID == id SELEct s; var result = query.SingLeorDefault(); return result; }
我认为使用Take(2),我仍然可以获得SingLeorDefault()的功能,还有额外的好处,从不必担心意外返回{n}行,但我不确定它是否值得,除非我’我不断期望用我的查询意外返回{n}行.
那么,这值得吗?有害吗?有没有我没见过的专业人士/骗子?
编辑:
SELECT [t0].[blah],(...) FROM [dbo].[Single] AS [t0] WHERE [t0].[ID] = @p0
SELECT TOP 2 [t0].[blah],(...) FROM [dbo].[Single] AS [t0] WHERE [t0].[ID] = @p0
此外,当我谈到SingLeorDefault的功能时,我特别希望在返回2个或更多时抛出异常,这就是为什么我在做“Take(2)”.不同之处在于,如果没有.Take(2),它将返回数据库中的{n}行,当它真的只需要返回2时(刚好足以让它抛出).
如果查询中的ID是表的主键或UNIQUE列,则数据库将确保结果集@R_217_11262@行或不包含TOP子句.
但是,如果您选择非唯一/非键列并想要第一个结果或最后结果(请注意,除非您还引入了OrderBy,否则这些结果没有意义),那么您可以使用First或Last(它们都具有OrDefault同行)获得你想要的sql:
var query = from s in context.Singles where s.Id == id orderby s@L_803_30@meOthercolumn SELEct s; var item = query.FirstOrDefault();
在旁注中,如果您确实在对单个元素进行查询,则可以节省一些输入:
var query = from s in context.Singles where s.Id == id SELEct s; var item = query.SingLeorDefault();
可以变成:
var item = context.Singles.SingLeorDefault(s => s.Id == id);
以上是大佬教程为你收集整理的c# – 这个SingleOrDefault()优化是否值得,还是过度/有害?全部内容,希望文章能够帮你解决c# – 这个SingleOrDefault()优化是否值得,还是过度/有害?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。