C# DefaultIfEmpty的解决方法
我有这样的想法:C# DefaultIfEmpty的解决方法,c#,linq,enums,entity-framework-core,C#,Linq,Enums,Entity Framework Core,我有这样的想法: public enum CoolEnum { Yes = 0, No = 1, Perhaps = 2, Maybe = 3, Perchance = 4, } 我想做以下几点: CoolEnum? enum = await this.context .MyTable .Where(x => x.Id == id) .Select(x => x.Co
public enum CoolEnum
{
Yes = 0,
No = 1,
Perhaps = 2,
Maybe = 3,
Perchance = 4,
}
我想做以下几点:
CoolEnum? enum = await this.context
.MyTable
.Where(x => x.Id == id)
.Select(x => x.CoolEnum)
.DefaultIfEmpty((CoolEnum?)null)
.FirstAsync();
CoolEnum enum = await this.context
.MyTable
.Where(x => x.Id == id)
.Select(x => x.CoolEnum)
.FirstAsync();
CoolEnum? nullableEnum = enum == default ? null : enum;
但是我得到了错误
Processing of the LINQ expression 'DefaultIfEmpty<Nullable<CoolEnum>> (...) failed.
This may indicate either a bug or a limitation in EF Core.
但这会将所有现有枚举的默认值更改为null,这不是我想要的
我可以使用哪种干净的解决方法?我看到以下选项:
- 返回MyTable的整个对象。但如果规模很大,这是对资源的浪费
- 在我的枚举中定义一个“null”默认元素
- 将查询拆分为两个查询,一个用于查看是否存在元素,另一个用于获取元素
他们俩看起来都不干净。有更好的主意吗?您可以选择可为null的值(通过使用常规的C#cast转换为相应的可为null的类型),然后选择
FirstOrDefault{Async}
:
.Select(x => (CoolEnum?)x.CoolEnum)
.FirstOrDefaultAsync();
DefaultEmpty与左外部联接一起使用。请看:我认为DefaultEmpty也可以用于任何其他内容。