using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Reflection; using System.Text; namespace APT.Infrastructure.EF.Extensions { public class IQueryableSelectorExtension { public static Expression> CreateSelecter(List columns) { Expression> selector = null;             //(rec)             ParameterExpression param = Expression.Parameter(typeof(TSource), "rec");             //new ParadigmSearchListData             var v0 = Expression.New(typeof(TResult)); var memberBindings = new List(); foreach (var column in columns) { var left = typeof(TResult).GetProperty(column); var right = Expression.Property(param, typeof(TSource).GetProperty(column)); memberBindings.Add(Expression.Bind(left, right)); } Expression body = Expression.MemberInit(v0, //{ Number = rec.NUMBER, Name = rec.RES_NAME } memberBindings.ToArray()); selector = (Expression>)Expression.Lambda(body, param); return selector; } private static MemberAssignment GetPropertyLambdaExpression(ParameterExpression param, string field) { string[] propertyNames = field.Split('.'); Expression propertyAccess = param; Type type = param.Type; PropertyInfo property; foreach (string propertyName in propertyNames) { property = type.GetProperty(propertyName); if (property != null) { type = property.PropertyType; propertyAccess = Expression.MakeMemberAccess(propertyAccess, property); } } //var left = typeof(TResult).GetProperty(column); //return Expression.Bind(property, Expression.Lambda(propertyAccess, param)); //return Expression.Lambda(propertyAccess, param); return null; } } }