OrderBy(propertyName)用于复杂类型

时间:2014-03-01 23:29:59

标签: c# linq

我有

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

             ));

        }

}

2 个答案:

答案 0 :(得分:3)

直截了当:

examples.OrderBy(x => x.user.Name);

应该工作得很好。但是,通常OrderBy不会消耗字符串 - 您是否有理由利用该语法?

答案 1 :(得分:0)

我认为你在寻找:

List<User> SortedList = examples.OrderBy(u=>u.Name).ToList();

您必须使用Linq