c# - SqlFunctions.StringConvert() 不工作 ef 核心

标签 c# entity-framework-core ef-core-3.0

我正在将应用程序迁移到 .net 核心。但 SqlFunctions.StringConvert() 在 .netcore 中不起作用。
我正在使用以下代码:

using (var entity = new AppEntity())
            {
            var    physianAggregationList = (from physianAggregaton in entity.tbl_Physician_Aggregation_Year

                                          where (
                                                 (physianAggregaton.CMS_Submission_Year == cmsyear)
                                                 && (physianAggregaton.Physician_NPI == npi || (string.IsNullOrEmpty(npi)))
                                                 && physianAggregaton.Is_90Days == is_90Days && physianAggregaton.Exam_TIN == Tin                                                  
                                                 )
                                          select new Tindata
                                          {


                                              Performance_Rate = entity.tbl_Lookup_Measure.Where(i => i.Measure_num.ToLower() == physianAggregaton.Measure_Num.ToLower()
                                                                                                  && i.CMSYear == physianAggregaton.CMS_Submission_Year)
                                                                                                  .Select(x => x.Perf_Rate_Per_1000).FirstOrDefault() == boolValue
                                                                                                  ? (physianAggregaton.Performance_rate == null ? "NULL" : SqlFunctions.StringConvert(physianAggregaton.Performance_rate, 100, 2))
                                                                                                  : (physianAggregaton.Performance_rate == null ? "NULL" : SqlFunctions.StringConvert(physianAggregaton.Performance_rate, 100, 2) + "%"),


                                              Reporting_Rate = physianAggregaton.Reporting_Rate == null ? "NULL" : SqlFunctions.StringConvert(

                                              //}).Distinct().OrderBy(x=>x.displayorder).ToList();
                                          }).Distinct().OrderBy(x => x.LastName).ToList();
                ///logger.LogInfo("PhysianAggregation Count in getPhysianAggregationData():[" + physianAggregationList.Count()+"]");
            } 

最佳答案

SqlFunctions是 EF6 特定的类,不能在 EF Core 中使用。 EF Core 自定义函数可用作 EF.Functions 的扩展方法.

不幸的是,目前 EF Core 不提供等效的 StringConvert .但是通过使用 EF Core Database scalar function mapping 可以相对容易地添加它并映射到 STR方法类似于EF6正在做的事情。

例如,添加以下类(带有必要的 using s):

public static class SqlFunctions
{
    public static string ToString(this decimal? value, int? length, int? decimalArg) => throw new NotSupportedException();
    public static string ToString(this double? value, int? length, int? decimalArg) => throw new NotSupportedException();
    public static ModelBuilder AddSqlFunctions(this ModelBuilder modelBuilder) => modelBuilder
        .MapToSTR(() => ToString(default(decimal?), null, null))
        .MapToSTR(() => ToString(default(double?), null, null));
    static ModelBuilder MapToSTR(this ModelBuilder modelBuilder, Expression<Func<string>> method)
    {
        modelBuilder.HasDbFunction(method).HasTranslation(args =>
            new SqlFunctionExpression(null, null, "STR", false, args, true, typeof(string), null));
        return modelBuilder;
    }
}

那么下面你的OnModelCreating里面覆盖:
if (Database.IsSqlServer()) modelBuilder.AddSqlFunctions();

然后在查询中,替换
SqlFunctions.StringConvert(physianAggregaton.Performance_rate, 100, 2)


physianAggregaton.Performance_rate.ToString(100, 2)

关于c# - SqlFunctions.StringConvert() 不工作 ef 核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60301606/

相关文章:

c# - DefaultModelBinder 和继承对象的集合

c# - 首先配置 mysql 以使用 Entity Framework 6 代码

c# - EF Core 3.0 - 将 SQL 转换为 LINQ

c# - 解决 "InvalidOperationException: The LINQ expression [...] could not be translated"并保留 ToListAsync()

asp.net-core - 如何使用 'AsNoTracking' 方法结合显式加载相关实体在 EF Core 中加载实体

c# - 如何使用迁移将描述添加到 Entity Framework Core 代码优先中的列?

c# - AES 加密 - 使用相同 key 和 IV 的不同加密值

c# - 如何打开DLL文件看里面写的是什么?

c# - EF : manual (non autogenerated) keys require ad hoc handling of new entities

c# - Entity Framework Core 排除结果