Genel

Linq Dynamic Field

Gelen parametreye’e göre Generic List içerisinde farklı bir kolona bakacağımızı farzedelim. Bu durumda daha az kod yazabilmek için linq lambda sorgumuzda kısaltmaya gitmemizde fayda olur.

 /// <summary>
        /// Hangi kolona ait olduğunu bulma
        /// </summary>
        /// <typeparam name="T">istek tipi</typeparam>
        /// <typeparam name="K">dönüş tipi</typeparam>
        /// <param name="name">Karşılaştırlacak string ifade</param>
        /// <returns></returns>
        public static Expression<Func<T, K>> ToMemberOf<T, K>(this string name) where T : class {
            var parameter = Expression.Parameter(typeof(T), "e");
            var propertyOrField = Expression.PropertyOrField(parameter, name);
            var unaryExpression = Expression.MakeUnary(ExpressionType.Convert, propertyOrField, typeof(K));

            return Expression.Lambda<Func<T, K>>(unaryExpression, parameter);
        }

Kullanımı;

var result = LanguageDelegations.Where(x => x.DelegateKey.Equals(DelegateKey)).Select(lang.ToMemberOf<LanguageDelegation, string>()).FirstOrDefault()