【问题标题】:IsNumeric in EF CoreEF Core 中的 IsNumeric
【发布时间】:2020-03-30 07:51:54
【问题描述】:

在 EF Core 中是否有等效的 IsNumeric 或使用 linq 或 Dynamic Sql 或类似的?

我试图仅从 nvarchar 列中获取具有数值的行。

【问题讨论】:

    标签: entity-framework-core


    【解决方案1】:

    现在已将其添加到 EF Core,它看起来像是 EF Core 6.0 的一部分 - https://github.com/dotnet/efcore/issues/23114

    【讨论】:

      【解决方案2】:

      你可以使用Raw SQL Queries

      安全提示:Always use parameterization for raw SQL queries

      鉴于此数据集/结果:

      EF Core 的实体类:Sandbox.cs

          public class Sandbox
          {
              public int SandboxId { get; set; }
              public string StringOrNumber { get; set; }
          }
      

      在您的上下文中创建一个 DbSet:

          public DbSet<Sandbox> Sandboxes { get; set; }
      

      标记为无键:

          modelBuilder.Entity<Sandbox>().HasNoKey();
      

      测试:

          public async Task<IList<Sandbox>> GetNumberList()
          {
              // 1 = number, 0 = string
              var isNumeric = new SqlParameter("isNumeric", 1);
      
              var listOfNumbers = await _context.Sandboxes
              .FromSqlRaw("SELECT SandboxId, StringOrNumber FROM dbo.Sandbox WHERE ISNUMERIC(StringOrNumber) = @isNumeric", isNumeric)
              .ToListAsync();
      
              return listOfNumbers;
          }
      

      FromSqlRaw 的替代方案是FromSqlInterpolated

          var listOfNumbers = await _context.Sandboxes
          .FromSqlInterpolated($"SELECT SandboxId, StringOrNumber FROM dbo.Sandbox WHERE ISNUMERIC(StringOrNumber) = {isNumeric}")
          .ToListAsync();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-21
        • 2019-05-02
        • 2018-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-06
        • 2020-03-29
        相关资源
        最近更新 更多