使用Entity Framework进行选择时如何替换字符串

4

我有一个SQL Server数据源,但无法进行修改(我不是dbo)。 我使用Entity Framework 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

有人可以指点我正确的方向吗?提前感谢。
1个回答

0
你可以在你的顾客模型类中添加一个属性来进行替换,该属性不会被映射或序列化。
这只是意味着将所有对“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('ñ', '¥'); }
    }
}

好的,让我来试一下,只是为了澄清一下...如果你更新你的模型,那么 NotMapped 标签会防止属性被删除吗? - Robert K
由于这是模型优先的,您可以使用部分类(“public partial class Customer { ... }”)在单独的文件中添加“CorrectName”属性。NotMapped 可能仅适用于代码优先 - 对于模型优先的后果我不确定,抱歉。 - c b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接