我用vs2005的,下面的代码是把DataReader转换为List的,但是编译时提示:
The type or namespace name 'BindingFieldAttribute' could not be found (are you missing a using directive or an assembly reference?)
怎么会出这个错误呢?public static IList<T> FillList<T>(System.Data.IDataReader reader)
    {
        IList<T> lst = new List<T>();
        while (reader.Read())
        {
            T RowInstance = Activator.CreateInstance<T>();
            foreach (PropertyInfo Property in typeof(T).GetProperties())
            {
                foreach (BindingFieldAttribute FieldAttr in Property.GetCustomAttributes(typeof(BindingFieldAttribute), true))
                {
                    try
                    {
                        int Ordinal = reader.GetOrdinal(FieldAttr.FieldName);
                        if (reader.GetValue(Ordinal) != DBNull.Value)
                        {
                            Property.SetValue(RowInstance, Convert.ChangeType(reader.GetValue(Ordinal), Property.PropertyType), null);
                        }
                    }
                    catch
                    {
                        break;
                    }
                }
            }
            lst.Add(RowInstance);
        }
        return lst;
    }

解决方案 »

  1.   

    public static IList<T> FillDataListGeneric<T>(System.Data.IDataReader reader) where T : Kchen.Core.BaseBusinessObject
            {
                //实例化一个List<>泛型集合
                IList<T> DataList = new List<T>();
                while (reader.Read())
                {
                    //由于是是未知的类型,所以必须通过Activator.CreateInstance<T>()方法来依据T的类型动态创建数据实体对象
                    T RowInstance = Activator.CreateInstance<T>();
                    //通过反射取得对象所有的Property
                    foreach (PropertyInfo Property in typeof(T).GetProperties())
                    {
                        //BindingFieldAttribute为自定义的Attribute,用于与数据库字段进行绑定
                        foreach (BindingFieldAttribute FieldAttr in Property.GetCustomAttributes(typeof(BindingFieldAttribute), true))
                        {
                            try
                            {
                                //取得当前数据库字段的顺序
                                int Ordinal = reader.GetOrdinal(FieldAttr.FieldName);
                                if (reader.GetValue(Ordinal) != DBNull.Value)
                                {
                                    //将DataReader读取出来的数据填充到对象实体的属性里
                                    Property.SetValue(RowInstance, Convert.ChangeType(reader.GetValue(Ordinal), Property.PropertyType), null);
                                }
                            }
                            catch
                            {
                                break;
                            }
                        }
                    }
                    //将数据实体对象add到泛型集合中
                    DataList.Add(RowInstance);
                }
                return DataList;
            }