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