C# WinForms ve Mono GTK Console Sistem ve Servis Programlama

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()