如何设置默认值(TSource)

发布于 2024-11-16 20:57:54 字数 288 浏览 2 评论 0原文

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

笑忘罢 2024-11-23 20:57:54

使用DefaultIfEmpty(defaultValue)。这将确保如果集合为空,它将填充该类型的默认实例。

所以你可以这样做:

var defaultValue = new CrazyControl(...);

List<CrazyControls> cc = CrazyControlRepository.All();
cc.Where(p => p.Id == id).DefaultIfEmpty(defaultValue).First().Render();

查询表达式需要稍微改变一下。新的工作原理如下:

  1. 根据现有标准过滤集合。这将在过滤序列中留下一个项目或不留下任何项目。
  2. 使用 DefaultIfEmpty 确保序列仅包含一项(如果已经有一项,DefaultIfEmpty 将不执行任何操作)。
  3. 使用 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:

var defaultValue = new CrazyControl(...);

List<CrazyControls> cc = CrazyControlRepository.All();
cc.Where(p => p.Id == id).DefaultIfEmpty(defaultValue).First().Render();

The query expression needed to change a bit. The new one works like this:

  1. Filter the collection according to the existing criteria. This will leave either one or no items in the filtered sequence.
  2. Use DefaultIfEmpty to make sure that the sequence contains exactly one item (if it had one already, DefaultIfEmpty will do nothing).
  3. Use First to get the single item. The reason I did not use Single instead of first is that if the predicate were different (or it changes in the future) and it accepted multiple items, Single would throw.
圈圈圆圆圈圈 2024-11-23 20:57:54

如果没有元素,您需要定义要返回的“某些内容”:

(cc.SingleOrDefault(p => p.Id == id) ?? new CrazyControls()).Render();

换句话说,您需要定义默认值

You need to define this `something' that you want to return if there are no elements:

(cc.SingleOrDefault(p => p.Id == id) ?? new CrazyControls()).Render();

In other words you need to define the default value.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文