我有
class User
{
public string Name {get; set; }
}
和
class Example
{
public virtual User user {get; set; }
}
他们是1..N关系,我正在使用EF而且一切正常,但我想做
var model = examples.OrderBy("user.Name");
其中示例是示例的IQueryable,我得到的错误是Example没有user.Name的属性。这是为什么?我可以为类User指定比较规则吗?我尝试实现ICompare和IComparable但没有成功。
编辑: 这是orderBy的扩展,如何修改它以便能够将它用于我的示例
public static IQueryable OrderBy(this IQueryable source, string propertyName)
{
var x = Expression.Parameter(source.ElementType, "x");
var selector = Expression.Lambda(Expression.PropertyOrField(x, propertyName), x);
return source.Provider.CreateQuery(
Expression.Call(typeof(Queryable), "OrderBy", new Type[] { source.ElementType, selector.Body.Type },
source.Expression, selector
));
}
}
答案 0 :(得分:3)
直截了当:
examples.OrderBy(x => x.user.Name);
应该工作得很好。但是,通常OrderBy
不会消耗字符串 - 您是否有理由利用该语法?
答案 1 :(得分:0)
我认为你在寻找:
List<User> SortedList = examples.OrderBy(u=>u.Name).ToList();
您必须使用Linq