在EF中构建自定义OrderBy表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在EF中构建自定义OrderBy表达式相关的知识,希望对你有一定的参考价值。
我有通用的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表中。
我面临的问题是“Path”实体不会始终包含在结果中。这就是我首先需要检查,然后为OrderBy子句构建自定义表达式的原因。
答案
您可以使用LINQ动态查询库,它允许orderby,where子句和其他操作中的字符串参数。
.OrderBy( “COLUMNNAME”)
另一答案
您可以检查OrderBy()子句以检查item.Path.Path是否为nullOrEmpty:
var resultQuery = query
.OrderBy(item => !string.IsNullOrEmpty(item.Path.Path))
.ThenBy(item => item.FileName)
.Select(selector);
以上是关于在EF中构建自定义OrderBy表达式的主要内容,如果未能解决你的问题,请参考以下文章
我可以重用代码来为 EF Core 的子属性选择自定义 DTO 对象吗?