将数据表转换为通用列表不使用文化中的小数点分隔符,并且始终使用period(。)作为分隔符

时间:2018-06-19 19:16:16

标签: c# linq reflection currentculture

我编写了一个扩展方法,将Datatable转换为如下所示的通用可观察集合:

public static ObservableCollection<T> ToObservableCollection<T>(this DataTable dt)
        {

            var columnNames = dt.Columns.Cast<DataColumn>()
                .Select(c => c.ColumnName.ToUpperInvariant())
                .ToList();

            var properties = typeof(T).GetProperties();

            List<T> returnList = dt.AsEnumerable().Select(row =>
            {
                var objT = Activator.CreateInstance<T>();

                foreach (var pro in properties)
                {
                    if (columnNames.Contains(pro.Name.ToUpperInvariant()))
                    {
                        if (row[pro.Name] != DBNull.Value && Convert.ToString(row[pro.Name]) != string.Empty)
                        {
                            if ((pro.PropertyType == Type.GetType("System.Boolean")) || (row[pro.Name].GetType() == Type.GetType("System.Boolean")))
                                pro.SetValue(objT, Convert.ToBoolean(row[pro.Name]), null);

                            else if (row[pro.Name].GetType() == Type.GetType("System.Int64"))
                                pro.SetValue(objT, Convert.ToInt32(row[pro.Name]), null);
                            else
                                pro.SetValue(objT, row[pro.Name], System.Reflection.BindingFlags.Default, null, null, CultureInfo.CurrentUICulture);
                        }
                    }
                }

                return objT;
            }).ToList();

我在我的机器(image)中将小数符号设置为Comma(,),而我的应用程序的CurrentCulture中的数字格式具有相同的值(image)。

从数据库返回的数据表也具有十进制值,其中十进制分隔符是逗号(,)see image

当我使用上述方法将此数据表转换为可观察集合时,我得到了具有十进制值的可观察集合,但没有小数点分隔符逗号(,),而是将period(。)作为小数点分隔符。

我在这里想念什么?

如果我的问题不清楚,请告诉我。我将相应地添加更多详细信息。

我尝试使用示例WPF应用程序重现此行为,当我在属性上执行ToString()并将其显示在标签中时,我将逗号(,)作为小数点分隔符。如果我不执行ToString(),则将period(。)用作小数点分隔符(image

尝试了Rick Strahl's Web Log中提供的解决方案,但也没有帮助。

0 个答案:

没有答案