Столбец Coverting String в формате DataTable to Date и сохранить его в списке - PullRequest
0 голосов
/ 30 апреля 2020

В этом сценарии у меня есть dtData, который представляет собой DataTable строки. Этот DataTable содержит всего 1 столбец. В этом столбце у нас есть дата в виде строки. Я хотел преобразовать этот столбец в тип даты и сохранить его в списке.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Я думаю, что все oop было бы проще:

CultureInfo enUS = new CultureInfo("en-US");
foreach(var r in dt.Rows)
  if(DateTime.TryParseExact((string)r[0], "DATE FORMAT HERE", enUS, DateTimeStyles.None, out var d)
    list.Add(d);

Можно также использовать LINQ, но это выглядит более грязно

CultureInfo enUS = new CultureInfo("en-US");
dt.AsQueryable()
  .Select(r => DateTime.TryParseExact((string)r[0], "DATE FORMAT HERE", enUS, DateTimeStyles.None, out var d) ? d : DateTime.MinValue)
  .Where(d => d > DateTime.MinValue)
  .ToList();
0 голосов
/ 30 апреля 2020
public static class DBHelper<T>
{
    public static void ConvertDataRowToModel(T modelObj, DataRow dataRow)
    {
        var properties = from prop in modelObj.GetType().GetProperties()
                         select prop;

        foreach (var property in properties)
        {
            dynamic propertyValue = null;

            foreach (DataColumn col in dataRow.Table.Columns)
            {
                if (property.Name.ToUpper().Equals(col.ColumnName.ToString().ToUpper()))
                {
                    propertyValue = dataRow[col.ColumnName] != DBNull.Value ? dataRow[col.ColumnName] : null;
                    break;
                }
            }


            if (propertyValue != null)
            {
                var propertyType = property.PropertyType.FullName;
                if (property.PropertyType.IsGenericType && property.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
                {
                    propertyType = property.PropertyType.GetGenericArguments()[0].FullName;
                }
                switch (propertyType)
                {
                    case "System.Int32":
                        {
                            property.SetValue(modelObj, Convert.ToInt32(propertyValue), null);
                            break;
                        }
                    case "System.Nullable[System.Int32]":
                        {
                            property.SetValue(modelObj, Convert.ToInt32(propertyValue), null);
                            break;
                        }
                    case "System.Int64":
                        {
                            property.SetValue(modelObj, Convert.ToInt64(propertyValue), null);
                            break;
                        }
                    case "System.Boolean":
                        {
                            property.SetValue(modelObj, Convert.ToBoolean(Convert.ToInt16(propertyValue)), null);
                            break;
                        }
                    case "System.String":
                        {
                            var val = WebUtility.HtmlDecode(Convert.ToString(propertyValue));
                            property.SetValue(modelObj, val, null);
                            break;
                        }
                    case "System.DateTime":
                        {
                            property.SetValue(modelObj, Convert.ToDateTime(propertyValue), null);
                            break;
                        }
                    case "System.Decimal":
                        {
                            property.SetValue(modelObj, Math.Round(Convert.ToDecimal(propertyValue), 2), null);
                            break;
                        }
                    case "System.Double":
                        {
                            property.SetValue(modelObj, Math.Round(Convert.ToDouble(propertyValue), 2), null);
                            break;
                        }
                    case "System.Byte[]":
                        {
                            property.SetValue(modelObj, (Byte[])(propertyValue), null);
                            break;
                        }
                    default:
                        {
                            Type t = Enum.GetUnderlyingType(property.PropertyType);
                            switch (t.FullName)
                            {
                                case "System.Int16":
                                    {
                                        property.SetValue(modelObj, Convert.ToInt16(propertyValue), null);
                                        break;
                                    }
                                case "System.Int32":
                                    {
                                        property.SetValue(modelObj, Convert.ToInt32(propertyValue), null);
                                        break;
                                    }
                            }
                            break;
                        }
                }
            }
        }
    }

    public static List<T> ConvertDataTableToModelList(DataTable dataTable)
    {
        List<T> modelList = new List<T>();

        foreach (DataRow dataRow in dataTable.Rows)
            {   var ob = Activator.CreateInstance<T>();

                ConvertDataRowToModel(ob, dataRow);
                modelList.Add(ob);
            }            
        return modelList;
    }
}

Над классом есть метод generi c для преобразования таблицы данных в список. механизм вызова: Lstsample lstsample == DBHelper.ConvertDataTableToModelList (datasetsample.Tables [0]);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...