首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DefaultIfEmpty的解决方案

DefaultIfEmpty的解决方案
EN

Stack Overflow用户
提问于 2020-03-24 13:51:29
回答 1查看 480关注 0票数 1

我有这样的事情:

代码语言:javascript
复制
public enum CoolEnum
{
  Yes = 0,
  No = 1,
  Perhaps = 2,
  Maybe = 3,
  Perchance = 4,
}

我想做以下几点:

代码语言:javascript
复制
CoolEnum? enum = await this.context
                .MyTable
                .Where(x => x.Id == id)
                .Select(x => x.CoolEnum)
                .DefaultIfEmpty((CoolEnum?)null)
                .FirstAsync();

但我明白错误

代码语言:javascript
复制
Processing of the LINQ expression 'DefaultIfEmpty<Nullable<CoolEnum>> (...) failed.
This may indicate either a bug or a limitation in EF Core. 

正如我所见过的这里,这似乎是一个众所周知的低优先级问题。

然后我想我可以做以下几件事:

代码语言:javascript
复制
CoolEnum enum = await this.context
                .MyTable
                .Where(x => x.Id == id)
                .Select(x => x.CoolEnum)
                .FirstAsync();

CoolEnum? nullableEnum = enum == default ? null : enum;

但是,这将将我现有的所有默认值更改为null,这不是我想要的。

我可以用哪种清洁的方法?我认为有以下几种选择:

  • 返回MyTable的整个对象。但如果它是大的,这是浪费资源。
  • 在my中定义一个"null“默认元素。
  • 将查询拆分为两个查询,一个用于查看是否有元素,另一个用于获取元素。

他们两个都不干净。有什么更好的主意吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-24 13:58:55

您可以选择可空值(使用常规的C#强制转换为相应的可空类型),然后选择FirstOrDefault{Async}

代码语言:javascript
复制
.Select(x => (CoolEnum?)x.CoolEnum)
.FirstOrDefaultAsync();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60832421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档