将NULL存储在空字符串列中

3

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

我不想为每个记录和每个属性迭代以在为空时放置null。

2个回答

2
您可以使用IValueConverter类来实现以下内容:以下代码是针对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
你可以在 WCF DataContract 中实现 [OnSerializing] 事件来检查 String.Empty 并将其更改为 null。例如:
[DataContract]
class MyDataStructure
{
    [DataMember]
    string Foo { get; set; }

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

如果您有很多字符串属性并且不想编写测试每个属性的代码,您可以始终使用反射通过类的属性进行循环。


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