解决方案 »

  1.   

    我写的这个是肯定是错的,
    我想要类似的这样一个函数来处理这个,请问该如何来写呢?万分感谢!
    /// <summary>
    /// 将SQL查询的DataTable数据转化为List
    /// </summary>
    /// <param name="dt">SQL查询结果</param>
    /// <returns>List</returns>
    private static List<NGTypeStats> DataTableToList(DataTable dt)
    {
        List<NGTypeStats> _ngTypeStatsList = new List<NGTypeStats>();    try
        {
            foreach (DataRow dr in dt.Rows)
            {
                NGTypeStats ngTypeStats = new NGTypeStats
                {
                    ProjectName = dr.ItemArray[0].ToString(),
                    Station = dr.ItemArray[1].ToString(),
                    TestCount = Convert.ToInt16(dr.ItemArray[2].ToString()),
                    NGTypes = new List<NGType>()
                };            NGType ngType = new NGType
                {
                    Type = Convert.ToInt32(dr.ItemArray[3]),
                    Count = Convert.ToInt32(dr.ItemArray[4])
                };
                ngTypeStats.NGTypes.Add(ngType);            _ngTypeStatsList.Add(ngTypeStats);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error in Read from SqlServer!" + ex.Message);
            return null;
        }
        return _ngTypeStatsList;
    }
      

  2.   

    你这是list 列表又嵌套一个list,给个方法,这个方法是转Datatable是没问题的,不过你的这种情况,要修改一下。 /// <summary>
            /// 获得集合实体
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static List<T> EntityList<T>(DataTable dt)
            {
                if (dt == null || dt.Rows.Count == 0)
                {
                    return null;
                }
                List<T> list = new List<T>();
                T entity = default(T);
                foreach (DataRow dr in dt.Rows)
                {
                    entity = Activator.CreateInstance<T>();
                    PropertyInfo[] pis = entity.GetType().GetProperties();
                    foreach (PropertyInfo pi in pis)
                    {
                        if (dt.Columns.Contains(pi.Name))
                        {
                            if (!pi.CanWrite)
                            {
                                continue;
                            }
                            if (dr[pi.Name] != DBNull.Value)
                            {
                                Type t = pi.PropertyType;
                                if (t.FullName == "System.Guid")
                                {
                                    pi.SetValue(entity, Guid.Parse(dr[pi.Name].ToString()), null);
                                }
                                else
                                {
                                    pi.SetValue(entity, dr[pi.Name], null);
                                }                        }
                        }
                    }
                    list.Add(entity);
                }
                return list;
            }
      

  3.   

    按test_station_name + test_count   字段分组查询。对查询出来的数据封装成一个LIST集合。
    select test_station_name ,test_count    from 表名 group by test_station_name ,test_count    
      

  4.   

    对不起,我只会写VB。Net的linq,先贴代码
            Dim query = From m In dt.AsEnumerable
                        Group m By product = m("product"), station = m("test_station_name"), testCount = m("test_count") Into grp = Group
                        Select New NGTypeStats With
                               {.Product = product, .Station = station, .TestCount = testCount,
                                .NGTypes = (From m In grp Select New NGType With {.Type = m("ng_code"), .Count = m("ng_count")}).ToList
                               }
              return query.tolist()
    思路是先将Datatable里面的Datarow按照product,test_station_name,test_count分组得到
    NGTypeStats 的Product ,Station TestCount , 而每组里面的数据的ng_code和ng_count取出来生成List就是.NGTypes 了。