【发布时间】:2013-11-15 23:37:51
【问题描述】:
我正在尝试在 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 });
然而,这会在编译时抛出,尽管 lambda 似乎是正确的语法告诉我它无法从 LambdaExpression 转换为 Expression<System.Func<E, int>>。
如何让它动态创建使用我的字段的正确表达式(即typeof(E).GetMember(Field).First()) 行中的属性“Field”?
【问题讨论】:
标签: c# linq lambda linq-expressions