我有通用的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”实体并不总是包含在结果中。这就是为什么我需要先检查,然后为OrderBy子句构建自定义表达式的原因。
答案 0 :(得分:0)
您可以使用LINQ动态查询库,该库允许orderby,where子句和其他操作中的字符串参数。
.OrderBy(“列名”)
答案 1 :(得分:0)
您可以在OrderBy()子句中添加一个检查项,以检查item.Path.Path是否为NullOrEmpty:
var resultQuery = query
.OrderBy(item => !string.IsNullOrEmpty(item.Path.Path))
.ThenBy(item => item.FileName)
.Select(selector);