gpt4 book ai didi

c# - 在方法中使用 IncludeMultiple

转载 作者:行者123 更新时间:2023-11-30 13:05:12 24 4
gpt4 key购买 nike

我正在使用 Ladislav Mrnka 的扩展方法:

    public static IQueryable<T> IncludeMultiple<T>(this IQueryable<T> query,
params Expression<Func<T, object>>[] includes)
where T : class
{
if (includes != null)
{
query = includes.Aggregate(query,
(current, include) => current.Include(include));
}

return query;
}

我从 Here 中采用了以下方法(稍作改动后):

public virtual IEnumerable<T> Get(
Expression<Func<T, bool>>[] filters = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
string includeProperties = "")
{
IQueryable<T> query = GetQuery();

if (filters != null)
{
foreach (var filter in filters)
{
query = query.Where(filter);
}
}

foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}

if (orderBy != null)
{
query = orderBy(query);
}

return query;
}

我想在 includeProperties 变量中使用 IncludeMultiple 而不是字符串。所以,我改变了功能:

public virtual IEnumerable<T> Get(
Expression<Func<T, bool>>[] filters = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
params Expression<Func<T, object>>[] includes)
{
IQueryable<T> query = GetQuery();

if (filters != null)
{
foreach (var filter in filters)
{
query = query.Where(filter);
}
}

if (includes.Length > 0)
{
query = query.IncludeMultiple(includes);
}

if (orderBy != null)
{
query = orderBy(query);
}

return query;
}

现在,我有点困惑。此方法在定义了 GetQuery() 的类中定义(存储库实现)。但是如果我想执行这个方法,我最初会使用 GetQuery()..
我说得对吗?
将其用作 IQueryable 的扩展是否更好?

最佳答案

不,调用 GetQuery 后不需要使用此方法,因为调用 GetQuery 是此方法中的第一个命令。您可以根据需要使用 GetQueryGetGet 方法实际上非常好,因为它隐藏了包含。在单元测试和模拟的情况下,将其用作存储库方法比将其用作扩展方法要好得多。

关于c# - 在方法中使用 IncludeMultiple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5784727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com