Мне нужно построить выражение:
{
t => new {
field1 = t.field1,
field2 = t.field2,
dateTimeField = TruncateTime(t.dateTimeField)
}
}
Я построил выражение:
{
t => new {
field1 = t.field1,
field2 = t.field2,
dateTimeField = t.dateTimeField
}
}
, используя LatticeUtilsAnonymousTypes , но я не могу обернуть t.dateTimeField
с функцией TruncateTime
.
Вот мой код:
public static Expression<Func<T, dynamic>> GroupByExpressionAnonymous(string fields,
string groupByDateField = null)
{
ISet<string> propertyNames = new HashSet<string>(fields.Split(',').Select(t => t.Trim()).ToList());
if (!String.IsNullOrEmpty(groupByDateField))
{
propertyNames.Add(groupByDateField);
}
ParameterExpression entityParameterExpression = Expression.Parameter(typeof(T), @"t");
var properties = typeof(T).GetProperties().Where(p => propertyNames.Contains(p.Name));
var propertyExpressions = properties.Select(p => Expression.Property(entityParameterExpression, p));
var anonymousType = AnonymousTypeUtils.CreateType(properties.ToDictionary(p => p.Name, p => p.PropertyType));
var anonymousTypeConstructor = anonymousType.GetConstructors().Single();
var anonymousTypeMembers = anonymousType.GetProperties().Cast<MemberInfo>().ToArray();
var anonymousTypeNewExpression = Expression.New(anonymousTypeConstructor, propertyExpressions, anonymousTypeMembers);
return Expression.Lambda<Func<T, dynamic>>(anonymousTypeNewExpression, entityParameterExpression);
}
Как я могу использовать усечение DbFunction до одного из полей выражения в таком случае?