字符串替换为实体框架选择

本文关键字:框架 选择 实体 替换 字符串 | 更新日期: 2023-09-27 18:07:17

我有一个SQL Server数据源不能修改(我不是dbo)。我使用实体框架6模型-首先做我的查询。一切都很好,除了我必须选择客户名称,只有两个字符不一致。

Datasource            Wanted
=============================
   ¤                    Ñ
   ¥                    ñ
  MU¤OZ               MUÑOZ
 Zu¥iga               Zuñiga

. .有一种透明的方式吗?很显然……您可以创建一个方法来替换它,并在查询客户表时调用它。但我想要的是做一个解决方案,与所有的查询已经创建,并将写太。

我读到关于实现

System.Data.Entity.Infrastructure.Interception.IDbCommandInterceptor

但不确定这是否正确。

查询及其结果的示例;

var aCostumer = db.costumers.Where(n=>n.idCostumer==someId).Select(n=>new{n.idCostumer,n.firstName,n.lastName}).FirstOrDefault();
结果

idCostumer    firstName    lastName
===================================
   1             DAVID       MU¤OZ

但是我希望查询结果是:

idCostumer    firstName    lastName
===================================
   1             DAVID       MUÑOZ
谁能给我指个正确的方向吗?提前感谢

字符串替换为实体框架选择

您可以向您的Customer模型类添加一个属性,该属性执行替换,并且不被映射或序列化。

这意味着将所有对"Name"的引用替换为"CorrectName"。

优先:

public class Customer
{
    // ...
    public string Name { get; set; }
    [NotMapped]
    public string CorrectName
    {
        get { return Name.Replace('¤', 'Ñ').Replace('¥', 'ñ'); }
        set { Name = value.Replace('Ñ', '¤').Replace('ñ', '¥'); }
    }
    // ...
}

模型先行:

// In a new file, so your changes don't get overwritten:
public partial class Customer
{
    public string CorrectName
    {
        get { return Name.Replace('¤', 'Ñ').Replace('¥', 'ñ'); }
        set { Name = value.Replace('Ñ', '¤').Replace('ñ', '¥'); }
    }
}