存储NULL而不是空字符串列

时间:2011-01-25 16:29:46

标签: .net wpf linq entity-framework

在保存包含所有更改的集合时,如何确保空字符串应为NULL?我正在使用linq,wpf,wcf。

我不想为每个记录和记录的每个属性进行迭代,如果空白则将其置为空。

2 个答案:

答案 0 :(得分:2)

你可以使用类似下面的IValueConverter类::下面的代码是for double,你可以激发其他类型的行为

public class DoubleNullFromStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is double || value is double?) return value;
        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null)
            return null;

        var strValue = value as string;
        if (strValue == null || strValue.Trim().Length == 0)
            return null; //allow empty strings and whitespaces

        double doubleValue = 0;
        if (double.TryParse(strValue, out doubleValue))
            return doubleValue;

        return value; //which will intenionally throw an error 
    }
}

然后将此绑定到您的控件,如下面的

<TextBox HorizontalAlignment="Left" Name="brokeragePaidText" VerticalAlignment="Top" Width="170" >
        <TextBox.Text>
            <Binding Source="{StaticResource insertTransaction}" Converter="{StaticResource DoubleNullFromStringConverter}" UpdateSourceTrigger="Explicit" Path="BrokeragePaid">
                <Binding.ValidationRules>
                    <ExceptionValidationRule/>
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>

答案 1 :(得分:1)

您可以在WCF DataContract中实现[OnSerializing]事件以检查String.Empty并将其更改为null。 EG:

[DataContract]
class MyDataStructure
{
    [DataMember]
    string Foo { get; set; }

    [OnSerializing]
    void OnSerializing(StreamingContext context)
    {
        if (Foo == String.Empty)
            Foo = null;
    }
}

如果你有很多字符串属性并且不想编写代码来测试每个属性,你总是可以使用Reflection循环遍历类的属性。