我正在学习更多关于IQueryable的知识并且有一个排序方法:
public IQueryable<T> OrderEntities(IQueryable<T> entities, string sortColumn, string sortOrder)
{
string sort = sortColumn;
if (!String.IsNullOrEmpty(sortColumn))
{
sort += " " + sortOrder;
}
return entities.SortBy<T>(sort);
}
工作正常,除非我的实体查询包含一个延迟加载或包含的表,该表具有您尝试排序的属性。这可以通过我看到的可查询扩展名之一来实现吗?
答案 0 :(得分:0)
你在linq查询中使用魔术字符串,在某些情况下工作,在我看来是不好的做法。
如果你真的只能通过字符串获得所需的排序,我建议你使用一个字典,将你允许的魔术字符串映射到谓词:IDictionary<string, Funct<...>
通过这种方式,您可以进行强类型编译,编译时间检查以及字符串的灵活性。 在字典中查找字符串参数,然后将谓词应用于OrderBy子句。
如果不支持请求的排序,您可以使用字典功能验证并向用户/开发人员报告综合消息。