如何设置默认值(TSource)
在 Linq 中,当我调用 SingleOrDefault 或 FirstOrDefault 时,如何为特定对象返回除 null 之外的其他内容,例如。
List<CrazyControls> cc = CrazyControlRepository.All();
cc.SingleOrDefault(p => p.Id == id).Render();
如何让我的 CrazyControls 返回实现基本 Render() 方法的默认实例?
In Linq When I call SingleOrDefault or FirstOrDefault how do I return something other than null for a particular object eg.
List<CrazyControls> cc = CrazyControlRepository.All();
cc.SingleOrDefault(p => p.Id == id).Render();
How do I make my CrazyControls return a default instance that implements a base Render() method?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
DefaultIfEmpty(defaultValue)
。这将确保如果集合为空,它将填充该类型的默认实例。所以你可以这样做:
查询表达式需要稍微改变一下。新的工作原理如下:
DefaultIfEmpty
确保序列仅包含一项(如果已经有一项,DefaultIfEmpty
将不执行任何操作)。First
获取单个项目。我没有使用Single
而不是第一个的原因是,如果谓词不同(或者将来发生变化)并且它接受多个项目,则Single
会抛出异常。With
DefaultIfEmpty(defaultValue)
. This will ensure that if the collection is empty, it will be populated with a default instance of the type.So you can do:
The query expression needed to change a bit. The new one works like this:
DefaultIfEmpty
to make sure that the sequence contains exactly one item (if it had one already,DefaultIfEmpty
will do nothing).First
to get the single item. The reason I did not useSingle
instead of first is that if the predicate were different (or it changes in the future) and it accepted multiple items,Single
would throw.如果没有元素,您需要定义要返回的“某些内容”:
换句话说,您需要定义
默认值
。You need to define this `something' that you want to return if there are no elements:
In other words you need to define the
default value
.