【问题标题】:C# Linq to SQL: How to express "CONVERT([...] AS INT)"?C# Linq to SQL:如何表达“CONVERT([...] AS INT)”?
【发布时间】:2009-06-14 04:45:04
【问题描述】:

在 MSSQL 中,您可以像这样将字符串转换为整数:

CONVERT(INT, table.column)

Linq to SQL 是否有任何 C# 表达式可以转换为此?

在 C# 中,您通常可以使用 int.Parse() 执行相同的操作,但不幸的是,尝试在 Linq 查询中使用 int.Parse() 会导致错误:

方法“Int32 Parse(System.String)”不支持 SQL 转换。

是否有任何 C# 表达式可以将 Linq to SQL 转换为 CONVERT(INT, ...)

【问题讨论】:

    标签: c# linq linq-to-sql


    【解决方案1】:

    C# 有 Convert.ToInt32() 应该可以满足您的需求。

    【讨论】:

    • LINQ to Entities 无法识别方法 'Int32 ToInt32(System.String)' 方法,并且该方法无法转换为存储表达式。
    【解决方案2】:

    Convert.ToInt32 应该可以工作。查看this article 了解翻译信息。

    【讨论】:

    • LINQ to Entities 无法识别方法 'Int32 ToInt32(System.String)' 方法,并且该方法无法转换为存储表达式。
    【解决方案3】:

    对于 LINQ to 实体,如果只是您的模型和数据库之间不匹配,您可以使用带有 EF Core 的 valueconverter 来克服这个问题。

    public OnModelCreating(ModelBuilder modelBuilder) {
      modelBuilder.Entity<mymodel>()
                  .Property(e => e.myModelIntColumn) // this column is a string in the db
                  .HasConversion(new ValueConverter<int?, string>(m => m.HasValue ? m.ToString().Substring(0,10) : null, db => int.Parse(db ?? "0")));
    }
    

    然后在我的 LINQ 中我可以使用位比较:

    MyDBSet.Where( e => (BitsWanted == 0 ||  ( e.myModelIntColumn & BitsWanted ) > 0));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多