SortBy包含IQueryable <t> </t>中的值

时间:2014-07-24 17:39:33

标签: c# asp.net-mvc entity-framework

我正在学习更多关于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);
}

工作正常,除非我的实体查询包含一个延迟加载或包含的表,该表具有您尝试排序的属性。这可以通过我看到的可查询扩展名之一来实现吗?

1 个答案:

答案 0 :(得分:0)

你在linq查询中使用魔术字符串,在某些情况下工作,在我看来是不好的做法。

如果你真的只能通过字符串获得所需的排序,我建议你使用一个字典,将你允许的魔术字符串映射到谓词:IDictionary<string, Funct<...>

通过这种方式,您可以进行强类型编译,编译时间检查以及字符串的灵活性。 在字典中查找字符串参数,然后将谓词应用于OrderBy子句。

如果不支持请求的排序,您可以使用字典功能验证并向用户/开发人员报告综合消息。