koenbeuk / EntityFrameworkCore.Projectables

Project over properties and functions in your linq queries
MIT License
260 stars 17 forks source link

A few cases of missing namespaces usings/imports for source generator for generics and null propogating rewrites #69

Closed vflame closed 1 year ago

vflame commented 1 year ago

For extension methods such as ToList(), ToArray(), and for new instances of generic list/collection/etc, namespaces/using/imports are missing:

        [Projectable(NullConditionalRewriteSupport = NullConditionalRewriteSupport.Rewrite)] //'ToArray not defined' due to missing 'using' for the 'ToArray()' extension method
        public static IEnumerable<Order> AProject6(this User user) => user?.Orders?.ToArray() ??  Array.Empty<Order>();

        [Projectable(NullConditionalRewriteSupport = NullConditionalRewriteSupport.Rewrite)] //similar to above, 'ToList' not defined due to missing 'using'
        public static IEnumerable<Order> AProject9(this User user) => user?.Orders?.ToList() ?? new List<Order>();

        [Projectable(NullConditionalRewriteSupport = NullConditionalRewriteSupport.Rewrite)] //Works as expected
        public static IEnumerable<Order> AProject7(this User user) => user?.Orders.ToArray() ?? Array.Empty<Order>();

        [Projectable(NullConditionalRewriteSupport = NullConditionalRewriteSupport.Rewrite)] //global name space missing for 'new List<Order>()' i.e., global::System.Collections.Generic.List  note that this does generate properly for arrays
        public static IEnumerable<Order> AProject8(this User user) => user?.Orders.ToList() ?? new List<Order>();
vflame commented 1 year ago

Generated source:

AProject6

// <auto-generated/>
#nullable disable
namespace EntityFrameworkCore.Projectables.Generated
{
    [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
    static class ReadmeSample_MyExtensions_AProject6
    {
        static global::System.Linq.Expressions.Expression<global::System.Func<global::ReadmeSample.Entities.User, global::System.Collections.Generic.IEnumerable<global::ReadmeSample.Entities.Order>>> Expression()
        {
            return (global::ReadmeSample.Entities.User user) => user != null ? (user.Orders != null ? (user.Orders.ToArray()) : (global::ReadmeSample.Entities.Order [ ])null) : (global::ReadmeSample.Entities.Order [ ])null ?? global::System.Array.Empty<global::ReadmeSample.Entities.Order>();
        }
    }
}

AProject9

// <auto-generated/>
#nullable disable
namespace EntityFrameworkCore.Projectables.Generated
{
    [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
    static class ReadmeSample_MyExtensions_AProject9
    {
        static global::System.Linq.Expressions.Expression<global::System.Func<global::ReadmeSample.Entities.User, global::System.Collections.Generic.IEnumerable<global::ReadmeSample.Entities.Order>>> Expression()
        {
            return (global::ReadmeSample.Entities.User user) => user != null ? (user.Orders != null ? (user.Orders.ToList()) : (global::System.Collections.Generic.List<global::ReadmeSample.Entities.Order>)null) : (global::System.Collections.Generic.List<global::ReadmeSample.Entities.Order>)null ?? new List<global::ReadmeSample.Entities.Order>();
        }
    }
}

AProject8

// <auto-generated/>
#nullable disable
namespace EntityFrameworkCore.Projectables.Generated
{
    [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
    static class ReadmeSample_MyExtensions_AProject8
    {
        static global::System.Linq.Expressions.Expression<global::System.Func<global::ReadmeSample.Entities.User, global::System.Collections.Generic.IEnumerable<global::ReadmeSample.Entities.Order>>> Expression()
        {
            return (global::ReadmeSample.Entities.User user) => user != null ? (global::System.Linq.Enumerable.ToList(user.Orders)) : (global::System.Collections.Generic.List<global::ReadmeSample.Entities.Order>)null ?? new List<global::ReadmeSample.Entities.Order>();
        }
    }
}