【发布时间】:2014-07-31 11:20:11
【问题描述】:
我有一个网格,我在其中从一个对象中获取数据。对象有一些复杂的数据类型。下面是我的代码能够排序 ORDERID 和 OrderNumber 但不是 CustomerInfo 属性
类:
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; }
}
我的前端网格定义了列,其中一列是
<asp:TemplateField HeaderText="Last Name" ItemStyle-Width="15%" SortExpression="OrderCustomerInfo.LastName">
<ItemTemplate>
<%# Eval("OrderCustomerInfo.LastName") %>
</ItemTemplate>
</asp:TemplateField>
当我传递排序表达式时:OrderCustomerInfo.LastName 它无法识别下面的列是我的排序函数,我收到错误 -
实例属性 'OrderCustomerInfo.LastName' 没有为类型 'Order' 定义 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.ArgumentException:实例属性 'OrderCustomerInfo.LastName' 没有为类型 'Order' 定义)
错误行 -- 表达式属性 = 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;
}
【问题讨论】:
-
应该是
OrderCustomerInfo.LastName还是Order.CustomerInfo.LastName? -
@Powerlord 不,我已经尝试过了,我得到了同样的错误——消息:“实例属性 'Order.CustomerInfo.LastName' 没有为类型 'Order' 定义”
-
你的
OrderCustomerInfo有LastName属性吗? -
@rageit,是的,我有,并且我将 OrderCustomerInfo.LastName 绑定到网格列
标签: c# linq object gridview-sorting columnsorting