public object Fill(ReleatedQuery config, object parent, IEnumerable <object> matchDatas, IValueSetter valueSetter)
        {
            var data = matchDatas.FirstOrDefault();

            valueSetter.SetField(parent, data, config.Filed);
            return(data);
        }
        public object Fill(ReleatedQuery config, object parent, IEnumerable <object> matchDatas, IValueSetter valueSetter)
        {
            var data        = matchDatas.FirstOrDefault();
            var fieldCount  = config.FillFields.Count();
            var dValueCount = config.DefaultValues.Count();

            if (data == null)
            {
                for (var i = 0; i < fieldCount; i++)
                {
                    var field = config.FillFields.ElementAt(i);
                    if (i >= dValueCount)
                    {
                        break;
                    }

                    var val = config.DefaultValues.ElementAt(i);
                    valueSetter.SetField(parent, val, field);
                }

                return(null);
            }

            for (var i = 0; i < fieldCount; i++)
            {
                var field = config.FillFields.ElementAt(i);
                var val   = ValueGetter.GetValue(field, data).Data;
                valueSetter.SetField(parent, val, field);
            }

            return(null);
        }
        public static IFillHandler Create(ReleatedQuery config)
        {
            switch (config.FillType)
            {
            case 0:
                return(ArrayFillHandler.Instance);

            case 1:
                return(SingleRecodFillHandler.Instance);

            case 2:
                return(FieldsFillHandler.Instance);
            }

            throw new ArgumentException("未找到匹配的字段填充方式!");
        }
예제 #4
0
        private void SetSubQueryValue(ReleatedQuery config, IValueSetter valueSetter, IEnumerable <object> parents, IEnumerable <object> datas)
        {
            var compareFields = config.CompareFields ?? new string[] { };
            Dictionary <string, string> mf = compareFields.Select(cf => cf.Split(SqlKeyWorld.Split)).ToDictionary(c => c[0], c => c[1]);
            var matchOneTime = config.MatchOneTime;

            foreach (var parent in parents)
            {
                IEnumerable <object> matchDatas = ValueGetter.GetFilterValues(mf, parent, datas);
                var handler = ReleatedFillHandlerFactory.Create(config);
                var data    = handler.Fill(config, parent, matchDatas, valueSetter);
                if (matchOneTime == false)
                {
                    continue;
                }

                datas = datas.Except(matchDatas).ToArray();
            }
        }
예제 #5
0
 public object Fill(ReleatedQuery config, object parent, IEnumerable <object> matchDatas, IValueSetter valueSetter)
 {
     valueSetter.SetField(parent, matchDatas, config.Filed);
     return(matchDatas);
 }