public static List <IFilter> CreateFilters <TTemplate>(ExcelHeaderRow headerRow) { Type templateType = typeof(TTemplate); var key = templateType; if (Table[key] != null) { return((List <IFilter>)Table[key]); } List <IFilter> filters = new List <IFilter>(); List <BaseFilterAttribute> attrs = new List <BaseFilterAttribute>(); TypeFilterInfo typeFilterInfo = TypeFilterInfoFlyweight.CreateInstance(typeof(TTemplate), headerRow); typeFilterInfo.PropertyFilterInfos.ForEach(a => a.FilterAttrs.ForEach(f => attrs.Add(f))); attrs.Distinct(new FilterAttributeComparer()).ToList().ForEach (a => { var filter = FilterFactory.CreateInstance(a.GetType()); if (filter != null) { filters.Add(filter); } }); Table[key] = filters; return(filters); }
/// <summary> /// 导入 /// </summary> /// <typeparam name="T">模板类</typeparam> /// <param name="fileUrl">Excel文件绝对地址</param> /// <param name="delegateNotExistInDatabase">数据库校验委托,标记了数据库重复校验特性则必填</param> /// <returns></returns> public static List <ExcelDataRow> Validate <T>(string fileUrl, Func <DatabaseFilterContext, bool> delegateNotExistInDatabase = null) where T : class, new() { Init(fileUrl); List <ExcelDataRow> rows = ExcelConverter.Convert <T>(Sheet, HeaderRow, 1); AndFilter andFilter = new AndFilter() { filters = FiltersFlyWeight.CreateFilters <T>(HeaderRow) }; FilterContext context = new FilterContext() { DelegateNotExistInDatabase = delegateNotExistInDatabase, TypeFilterInfo = TypeFilterInfoFlyweight.CreateInstance(typeof(T), HeaderRow) }; rows = andFilter.Filter(rows, context); return(rows); }