【问题标题】:Building custom OrderBy expression in EF在 EF 中构建自定义 OrderBy 表达式
【发布时间】:2018-11-20 15:36:41
【问题描述】:

我有适用于数据库上下文的通用 EntityFramework 类。该类用于从任意表中获取数据。

public async Task<List<TResult>> GetAsync<T, TResult>(
            Expression<Func<T, TResult>> selector,
            Expression<Func<T, bool>> predicate = null,
            IEnumerable<string> paths = null
            )
            where T : class, IEntityWithName<int>
        {
            var query = Entities<T>();

            if (predicate != null)
                query = query.Where(predicate);

            if (paths != null)
                foreach (var path in paths)
                    query = query.Include(path);

            var resultQuery = query
                .OrderBy(iten => item.Path.Path) // <- I need this part to work. 
                .ThenBy(item => item.FileName)  // Sort by Path first, then by FileName
                .Select(selector);

                var items = await resultQuery.ToListAsync();

                return items;
            }
        }

File table
   ID filename PathID
   1  dog1.jpg  1 
   2  dog2.jpg  2

Path table
   ID Path             
   1  \\folderPath1\           
   2  \\folderPath2\          

我的问题是如何提供 OrderBy 参数,以便结果首先按 Path 排序,当然是存储在 Path 表中。

我面临的问题是“路径”实体并不总是包含在结果中。这就是为什么我需要先检查,然后为 OrderBy 子句构建自定义表达式。

【问题讨论】:

  • 您无需包含用于订购的路径。

标签: c# entity-framework linq entity-framework-6 sql-order-by


【解决方案1】:

您可以使用允许在 orderby、where 子句和其他操作中使用字符串参数的 LINQ 动态查询库。

.OrderBy("列名")

【讨论】:

    【解决方案2】:

    您可以在 OrderBy() 子句中检查 item.Path.Path isNullOrEmpty:

    var resultQuery = query
                .OrderBy(item => !string.IsNullOrEmpty(item.Path.Path))
                .ThenBy(item => item.FileName)
                .Select(selector);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 2015-11-04
      • 2017-12-07
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多