C# LINQ:扩展包含以将其转换为列表和添加 OrderBy



我计划扩展 .包含(( 函数。 目前,我一直在使用这样的东西:

var data = _context.Examples
.Include(example => examples.SubExamples)
.FirstOrDefault();
if (data == null)
return null;
data.SubExamples = data.SubExamples
.OrderBy(subExamples => subExamples.CreatedOn)
.ToList();
return data;

我需要通过 CreatedOn 订购"SubExample"并将其转换为 List((,以便自动映射器可以毫无问题地映射它。由于我将在不同的实体上多次使用相同的方法,因此我计划扩展包含。但是我在如何重新分配列表方面遇到了问题。

public static IQueryable<TEntity> IncludeOrderBy<TEntity, TProperty>(
this IQueryable<TEntity> query,
Expression<Func<TEntity, TProperty>> include,
params Expression<Func<TEntity, TProperty>>[] orders)
{
query.Include(include);
// Need to assign to the Property as List() and Apply the OrderBy
return query;
}

问题是我如何将它们重新分配回列表并添加订单?

我不知道为什么你需要订单参数,但也许这个可以解决你的问题

public static IQueryable<T> IncludeOrderBy(this IQueryable<T> query, 
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, params Expression<Func<T, object>>[] includes)
{
includes.ForEach(x => query = query.Include(x));
if (orderBy != null)
{
query = orderBy(query);
}
return query;
}

你可以这样使用它:

list.IncludeOrderBy(x => x.OrderBy(y => y.CreatedOn));

试试这个:

return context.Examples
.Include(example => examples.SubExamples)
.FirstOrDefault()
?.SubExamples
.OrderBy(subExamples => subExamples.CreatedOn)
.ToList();

最新更新