Esempio n. 1
0
        protected object GetReferencedValue <T>(MGrid <T> pGrid, IMGridColumn column, Type pPropertyType, string pReferencedId)
        {
            var propInfo = column.GetType().GetProperty(nameof(MGridComplexPropertyColumn <object, object> .ReferencedValues));

            var referencedValues = propInfo.GetValue(column) as IEnumerable;
            var enumerator       = referencedValues.GetEnumerator();

            if (!enumerator.MoveNext())
            {
                return(null);
            }

            var firstValue = enumerator.Current;

            var pi = pGrid.GetIdentifierProperty(firstValue);
            //no idict support right now

            var refIdValue = ReflectionHelper.ChangeType(pReferencedId, pi.PropertyType);

            var queryable = referencedValues.AsQueryable();

            var param     = Expression.Parameter(pPropertyType, "p");
            var property  = Expression.Property(param, pi.Name);
            var exprEqual = Expression.Equal(property, Expression.Constant(refIdValue));

            var lambda = Expression.Lambda(exprEqual, param);

            var method = FirstOrDefaultMethod.MakeGenericMethod(new[] { pPropertyType });
            var val    = method.Invoke(null, new object[] { queryable, lambda });

            return(val);
        }