Skip to content

BUG: Dynamic new in Where() causes NRE #130

@xumix

Description

@xumix
 var keys = context.Model.FindEntityType(type).FindPrimaryKey().Properties;
            var properties = keys.Select(p => new DynamicProperty(p.PropertyInfo.Name, p.PropertyInfo.PropertyType)).ToList();
            var keyType = DynamicClassFactory.CreateType(properties, false);
           
            var dbSet = context.Set<SomeEntity>();
            
            var keyVals = (IList)ReflectionHelper.CreateGenericInstance(typeof(List<>), new[] { keyType });

            foreach (var obj in data)
            {
                var keyVal = Activator.CreateInstance(keyType);
                foreach (var key in keys)
                {
                    keyType.GetProperty(key.PropertyInfo.Name).SetValue(keyVal, key.PropertyInfo.GetValue(obj));
                }

                keyVals.Add(keyVal);
            }
            
            Func<string> getNew = () =>
            {
                var res = keys.Select(key => "it." + key.Name + " as " + key.Name).ToList();
                return "new(" + res.ToString(",") + ")";
            };

            Func<string> getContains = () => ".Contains(" + getNew() + ")";

            var existing = dbSet.Where("@0" + getContains(), keyVals)
                .Select(getNew());
System.ArgumentNullException
  HResult=0x80004003
  Message=Value cannot be null.
  Source=System.Linq.Expressions
  StackTrace:
   at System.Linq.Expressions.Expression.Bind(MemberInfo member, Expression expression)
   at System.Linq.Dynamic.Core.ExpressionParser.CreateNewExpression(List`1 properties, List`1 expressions, Type newType) in C:\Projects\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ExpressionParser.cs:line 1491

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions