在Linq to SQL中使用自定义数据类型

时间:2010-07-06 11:15:55

标签: c# linq-to-sql

有没有办法在Linq to SQL返回的实体中使用自定义数据类型?

假设我有这样的数据类型:

public struct CustomerNumber : IEquatable<string>
{
    private string _value;

    public static implicit operator CustomerNumber(string value)
    {
        return new CustomerNumber { _value = value };
    }

    ...
}

它还定义了==!=等的运算符。

当我尝试替换返回实体中的一个属性时,即使您可以从字符串中分配CustomerNumber,我也会得到异常Invalid cast from 'System.String' to 'CustomerNumber'

这是不可能还是我做错了什么?

编辑 - 澄清:

CustomerNumber用作Linq to SQL生成的实体上的数据类型。尝试查询数据库时发生异常。这不是我想要施展的东西,它在LinqToSQL魔法中的某个地方出错了。

我的代码看起来像这样:

var customers = DataContext.Customers;

编辑:

事实证明,如果你的struct实现了一个显式运算符,它可以工作,或者更确切地说,它正在使用一个结构来实现一个显式运算符,从字符串转换为类型,但不是如果它要从System.Int32转换到类型。

再次编辑:它仍然无效。

2 个答案:

答案 0 :(得分:1)

我认为你能够做到这一点的唯一方法是将它作为L2S生成的分部类中的属性编写。如果您将Column属性设为私有,则可以将其保留为字符串,然后将其用作自定义属性的后备存储,以显示您的自定义类型。

答案 1 :(得分:0)

正确的方法(来自MSDN)是:

  

如果类实现了Parse()和ToString(),则可以将对象映射到任何SQL文本类型(CHAR,NCHAR,VARCHAR,NVARCHAR,TEXT,NTEXT,XML)。通过将ToString()返回的值发送到映射的数据库列,该对象存储在数据库中。通过在数据库返回的字符串上调用Parse()来重构对象。