Multiple Includes() in EF Core

后端 未结 8 2168
傲寒
傲寒 2020-12-08 08:07

I have an extension method that lets you generically include data in EF:

public static IQueryable IncludeMultiple(this IQueryable          


        
8条回答
  •  青春惊慌失措
    2020-12-08 08:38

    I made this method to do the dynamic includes. This way the "Select" command can be used in lambda to include just as it was in the past.

    The call works like this:

    repository.IncludeQuery(query, a => a.First.Second.Select(b => b.Third), a => a.Fourth);
    
    private IQueryable IncludeQuery(
        params Expression>[] includeProperties) where TCall : class
    {
        IQueryable query;
    
        query = context.Set();
    
        foreach (var property in includeProperties)
        {
            if (!(property.Body is MethodCallExpression))
                query = query.Include(property);
            else
            {
                var expression = property.Body as MethodCallExpression;
    
                var include = GenerateInclude(expression);
    
                query = query.Include(include);
            }
        } 
    
        return query;
    }
    
    private string GenerateInclude(MethodCallExpression expression)
    {
        var result = default(string);
    
        foreach (var argument in expression.Arguments)
        {
            if (argument is MethodCallExpression)
                result += GenerateInclude(argument as MethodCallExpression) + ".";
            else if (argument is MemberExpression)
                result += ((MemberExpression)argument).Member.Name + ".";
            else if (argument is LambdaExpression)
                result += ((MemberExpression)(argument as LambdaExpression).Body).Member.Name + ".";
        }
    
        return result.TrimEnd('.');
    } 
    

提交回复
热议问题