List <T> GetKeyValuePairs <T>(IDataHolder obj, Func <TableDefinition, T> listCreator)
            where T : KeyValueListBase
        {
            var dataHolderDef = m_mapping.GetDataHolderDefinition(obj.GetType());
            var lists         = new List <T>(m_mapping.TableDefinitions.Length);

            for (var i = 0; i < m_mapping.TableDefinitions.Length; i++)
            {
                var table = m_mapping.TableDefinitions[i];
                for (var j = 0; j < table.ColumnDefinitions.Length; j++)
                {
                    var col = table.ColumnDefinitions[j];
                    for (var k = 0; k < col.FieldList.Count; k++)
                    {
                        var field = col.FieldList[k];
                        var def   = field.DataHolderDefinition;
                        if (def == dataHolderDef)
                        {
                            var list = lists.FirstOrDefault(l => l.TableName == table.Name);
                            if (list == null)
                            {
                                lists.Add(list = listCreator(table));
                            }

                            var value = field.Get(obj);
                            list.AddPair(col.ColumnName, value.ToString());
                        }
                    }
                }
            }
            return(lists);
        }
Beispiel #2
0
        private List <T> GetKeyValuePairs <T>(IDataHolder obj, Func <TableDefinition, T> listCreator)
            where T : KeyValueListBase
        {
            DataHolderDefinition holderDefinition = m_mapping.GetDataHolderDefinition(obj.GetType());
            List <T>             source           = new List <T>(m_mapping.TableDefinitions.Length);

            for (int index1 = 0; index1 < m_mapping.TableDefinitions.Length; ++index1)
            {
                TableDefinition table = m_mapping.TableDefinitions[index1];
                for (int index2 = 0; index2 < table.ColumnDefinitions.Length; ++index2)
                {
                    SimpleDataColumn columnDefinition = table.ColumnDefinitions[index2];
                    for (int index3 = 0; index3 < columnDefinition.FieldList.Count; ++index3)
                    {
                        IFlatDataFieldAccessor field = columnDefinition.FieldList[index3];
                        if (field.DataHolderDefinition == holderDefinition)
                        {
                            T obj1 = source.FirstOrDefault(l => l.TableName == table.Name);
                            if (obj1 == null)
                            {
                                source.Add(obj1 = listCreator(table));
                            }
                            object obj2 = field.Get(obj);
                            obj1.AddPair(columnDefinition.ColumnName, obj2.ToString());
                        }
                    }
                }
            }

            return(source);
        }