C# 使用实体框架/LINQ,可以一次性定义默认对象吗?

C# 使用实体框架/LINQ,可以一次性定义默认对象吗?,c#,linq,entity-framework,entity-framework-6,C#,Linq,Entity Framework,Entity Framework 6,在实体框架(代码优先)中,是否有一种方法可以定义默认对象,而不必每次进行查询时都添加DefaultIfEmpty(new…)?相反,无论何时调用FirstOrDefault(),LastOrDefault(),SingleOrDefault()且返回的结果为空,它都会返回定义的默认对象?据我所知,您无法控制它-它是所用数据类型的默认值(null,零表示int等) 我通常用??运算符与FirstOrDefault一起指定我希望在其为null时看到的值。通过在函数式编程的代码中添加扩展方法,可能会有

在实体框架(代码优先)中,是否有一种方法可以定义默认对象,而不必每次进行查询时都添加DefaultIfEmpty(new…)?相反,无论何时调用
FirstOrDefault()
LastOrDefault()
SingleOrDefault()
且返回的结果为空,它都会返回定义的默认对象?

据我所知,您无法控制它-它是所用数据类型的默认值(null,零表示int等)
我通常用??运算符与FirstOrDefault一起指定我希望在其为null时看到的值。

通过在函数式编程的代码中添加扩展方法,可能会有一个更简单的解决方案

using System;

namespace GetOrElse
{
    public static class GetOrElseExtension
    {
        public static T GetOrElse<T>(this Nullable<T> instance, T orElse) where T: struct
        {
            if (instance == null)
                return orElse;

            return instance.Value;
        }
    }
}
使用系统;
名称空间GetOrElse
{
公共静态类GetOrElseExtension
{
公共静态T GetOrElse(这个可为null的实例,T orElse),其中T:struct
{
if(实例==null)
返回orElse;
返回instance.Value;
}
}
}
然后使用它通过调用(在本例中,获取字符串值-

var result = YourEntity.Where(...).FirstOrDefault().GetOrElse<string>("DefaultValueHere");
var result=YourEntity.Where(…).FirstOrDefault().GetOrElse(“DefaultValueHere”);
参考: