Я пытаюсь выполнить динамическое соединение в linq. Это означает, что я знаю только во время выполнения, в каком поле произойдет соединение.
Я сделал следующее:
var itemParam = Expression.Parameter(typeof(E), "obj");
var entityAccess = Expression.MakeMemberAccess(Expression.Parameter(typeof(E), "obj"), typeof(E).GetMember(Field).First());
var lambda = Expression.Lambda(entityAccess, itemParam);
var q = dbSet.Join(context.Acl, lambda, acl => acl.ObjectID, (entity, acl) => new { Entity = entity, ACL = acl });
Однако это выдает во время компиляции, хотя лямбда кажется правильным синтаксисом, говорящим мне, что он не может преобразовать из LambdaExpression в Expression<System.Func<E, int>>
.
Как мне заставить его динамически создавать правильное выражение, которое использует мое поле (т.е. свойство «Поле» выше в строке typeof(E).GetMember(Field).First())
?