该参数未绑定在指定的LINQ to Entities查询表达式

时间:2017-05-22 09:47:30

标签: c# linq-to-entities expression linqkit

我目前正忙着使用LINQKit构建动态查询。

对于我的特定实体User,我定义了以下属性:

public static Expression<Func<User, MyEntites, int>> CountFromView => (user, ctx) => ctx.vwUserStats.Select(s => s.Count).FirstOrDefault();

我通常会使用像Select(u => new {Count = User.CountFromView.Invoke(u, ctx)}这样的linq,它完全可以找到。 但是,构建查询比我在此处写下来更复杂。

我有一个静态帮助器,它根据给定的配置构建查询(指示应该从数据库中选择/查询的内容和方式)。

var selectType = typeof(UserstatsSelect);
var theEntity = Expression.Parameter(typeof(User));

if (cfg.Select(nameof(UserstatsSelect.Count)))
    memberBindings.Add(Expression.Bind(selectType.GetProperty(nameof(Count)), Expression.Invoke(User.EventCountFromView, theEntity, ContextParameter)));

ContextParameter在基类中定义如下:

protected static ParameterExpression ContextParameter => Expression.Parameter(typeof(MyEntites), "context");

当我运行应用程序并让我显示它显示的查询时

(context, Param_0) => new OrganizerStatisticsResourceSelect() {
    EventCount = Invoke((user, ctx) => ctx.vwUserStats.Select(s => s.Count).FirstOrDefault(), Param_0, context)
}

这似乎完全没问题。不幸的是我得到了例外

  

参数'context'未绑定在指定的LINQ to Entities查询表达式

我不知道为什么会发生这种情况,因为我还有其他类似的属性,我以同样的方式传递ContextParameter。注意:我在结果集上调用Count()

(context, Param_0) => new OrganizerStatisticsResourceSelect() {
    AdvancedCount = Invoke((user, dbContext) => dbContext.fnGetSomeData(Convert(user.Id)), Param_0, context).AsQueryable()).Count()
}

0 个答案:

没有答案