class User
{
public string Name {get; set; }
}
和
class Example
{
public virtual User user {get; set; }
}
他們1..1關係,我使用EF和所有工作正常,但我想做
var model = examples.OrderBy("user.Name");
其中的例子是IQueryable的例子,我得到錯誤,示例沒有user.Name的屬性。這是爲什麼?我可以爲班級用戶指定比較規則嗎?我嘗試實現ICompare和IComparable沒有成功。
編輯: 這是排序依據的延長,我怎麼可以修改它能夠使用它爲我的例子
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
));
}
}
我有表和列名作爲字符串,我需要通過這些名稱進行排序,我知道我可以使用上面的代碼與很多ifs,但我想知道爲什麼我的代碼不工作。 – Medo
我剛剛意識到這是我們項目中有人寫的擴展。我將編輯問題 – Medo
@Medo,您正在使用的擴展方法不支持點符號。特別是'Expression.PropertyOrField(x,propertyName)'只能深入一層。你有沒有考慮過使用更加全面的API,如[動態LINQ](http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-動態查詢library.aspx)? –