SortBy包含IQueryable中的值

本文关键字:包含 IQueryable SortBy | 更新日期: 2023-09-27 18:14:44

我正在学习更多关于IQueryable's和有一个排序方法:

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);
}

工作得很好,除非我的实体查询包含一个延迟加载或包含的表,该表具有您尝试排序的属性。这是可能通过一个可查询的扩展,我看到周围浮动吗?

SortBy包含IQueryable<T>中的值

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

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

这样就可以实现强类型、编译时检查和字符串的灵活性。在字典中查找字符串参数,然后将谓词应用于OrderBy子句。

如果请求的排序不被支持,您可以使用字典函数来验证并向用户/开发人员报告一个全面的消息。