I have a grid where I am biding data from an object. Object has some complex data types. Below is my code Able to sort ORDERID and OrderNumber BUT NOT CustomerInfo Property
Class :
public class Order
{
public Int32 OrderID{ get; set; }
public String OrderNumber { get; set; }
public Customer CustomerInfo { get; set;}
}
public class Customer
{
public Int64 CustomerNumber { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public String Phone { get; set; }
}
My Front End grid has columns defined one of the columns is
<asp:TemplateField HeaderText="Last Name" ItemStyle-Width="15%" SortExpression="OrderCustomerInfo.LastName">
<ItemTemplate>
<%# Eval("OrderCustomerInfo.LastName") %>
</ItemTemplate>
</asp:TemplateField>
When I am passing Sort Expression : OrderCustomerInfo.LastName it's not recognizing the column below is my sort function, I am getting error --
Instance property 'OrderCustomerInfo.LastName' is not defined for type 'Order' Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: Instance property 'OrderCustomerInfo.LastName' is not defined for type 'Order' )
Error Line -- Expression property = Expression.Property(param, columnName); // x.ColumnName
public static IEnumerable<T> OrderBy<T>(this IEnumerable<T> collection, string columnName, SortDirection direction)
{
ParameterExpression param = Expression.Parameter(typeof(T), "x"); // x
Expression property = Expression.Property(param, columnName); // x.ColumnName
Func<T, object> func = Expression.Lambda<Func<T, object>>( // x => x.ColumnName
Expression.Convert(Expression.Property(param, columnName),
typeof(object)), param).Compile();
Func<IEnumerable<T>, Func<T, object>, IEnumerable<T>> expression =
SortExpressionBuilder<T>.CreateExpression(direction);
IEnumerable<T> sorted = expression(collection, func);
return sorted;
}
Is the issue not that this line:
Is missing a .?