使用LINQ和SQLServer将int和字符串与前导零进行比较 - c#

语境

我在数据库中有两个具有一对多关系的实体,如下所示:

public class Material {
    public long MaterialCode { get; set; }
}

public class MaterialDescription {
   [StringLength(18, MinimumLength = 18)]
   public string MaterialCode { get; set; }
}

如何使用LINQ查询给定材料的所有描述?

我尝试了什么?

    var descriptions = ctx.MaterialDescripions
        .Where(d => long.Parse(d.MaterialCode) == material.MaterialCode);

给出错误:LINQ to Entities does not recognize the method Int64 Parse(System.String)

    var descriptions = ctx.MaterialDescriptions
        .Where(d => d.MaterialCode.TrimStart('0') == material.MaterialCode.ToString());

给出错误:System.String TrimStart(char[]) is only supported in LINQ to Entities when there are no trim characters specified as arguments

参考方案

终于有了解决方案!

感谢Jeff Ogata和他的answer!

    var descriptions = ctx.MaterialDescriptions
        Where(d => d.MaterialCode.Substring(SqlFunctions.PatIndex("%[^0]%", d.MaterialDescription) == material.MaterialCode.ToString()));

使用代码优先重命名EF中的列 - c#

我在班上改名了。看起来像这样。public class clsClassForStackoverflow { [Column(TypeName = "varchar"), StringLength(150)] public string Name { get; set; } 由于结构上的更改,我不得不将其重命名。因此,我删除了该行并添加了…

使用Entity Framework Core(2.1)调用标量函数的最佳实践 - c#

我经常需要从Web应用程序(ASP.NET Core / EF Core)中调用在SQL Server上定义的标量函数。由于这些函数只是简单的辅助函数,因此我也使用了许多辅助函数,因此我使用了通用模式来调用这些标量函数-借助EF Core 2.1可用的新查询类型。由于我是EF Core的新手,所以我的问题是这种模式是否会引起问题,并且/或者是否存在调用标量函…

Entity Framework DbEntityEntry>'不包含Where的定义 - c#

此代码狙击手来自Adding CreatedDate to an entity using Entity Framework 5 Code First public override int SaveChanges() { DateTime saveTime = DateTime.Now; foreach (var entry in this.ChangeT…

本机SQL和实体SQL之间的区别 - c#

我看了一篇有关使用EntityConnection,EntityCommands执行Entity sql查询的文章。但是我无法理解为什么我们要使用实体sql?为什么不直接使用类和对象来处理数据库上的CRUD操作?或者,如果我们要执行sql查询,那么为什么要使用Entity Sql,为什么不直接使用Ado.net?有性能差异还是其他?我已经浏览过http://…

LINQ to SQL中的“无法识别的表达式节点数组索引linq”异常 - c#

这是我的LINQ,其中我将DateTime类型的字段与当前日期进行了比较- var srs = (from s in dcDistrict.ScheduledReportStatus where s.ReportConfigId.Equals(ConfigId) && s.Status.HasValue && s.Status…