1

我目前正在努力使用LINQKit.

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

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

这我通常会在 linq 中使用,就像Select(u => new {Count = User.CountFromView.Invoke(u, ctx)}完全可以找到的那样。然而,构建查询比我在这里写的要复杂。

我有一个静态助手,它根据给定的配置构建查询(指示应该从数据库中选择/查询什么以及如何查询)。

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()
}
4

0 回答 0