在保存包含所有更改的集合时,如何确保空字符串应为NULL?我正在使用linq,wpf,wcf。
我不想为每个记录和记录的每个属性进行迭代,如果空白则将其置为空。
答案 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循环遍历类的属性。