Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 为子查询提供表达式_.net_Entity Framework_Linq To Entities - Fatal编程技术网

.net 为子查询提供表达式

.net 为子查询提供表达式,.net,entity-framework,linq-to-entities,.net,Entity Framework,Linq To Entities,我有以下LINQ到实体查询(简化形式): 引发异常“内部.NET Framework数据提供程序错误1025” 这里的问题是我的规范调用。此问题的通常解决方案是将规范表达式调用移出查询,并将表达式直接传递到何处。但它在这里不起作用,因为我需要将bu.BattleId传递给表达式 更新。 以下是BattleIDisqualto的代码: public static Expression<Func<Model.Entities.BattleUser, bool>> UserId

我有以下LINQ到实体查询(简化形式):

引发异常“内部.NET Framework数据提供程序错误1025”

这里的问题是我的规范调用。此问题的通常解决方案是将规范表达式调用移出查询,并将表达式直接传递到何处。但它在这里不起作用,因为我需要将bu.BattleId传递给表达式

更新。

以下是BattleIDisqualto的代码:

public static Expression<Func<Model.Entities.BattleUser, bool>> UserIdIsEqualTo(long userId)
{
   return bu => bu.UserId == userId;
}
public静态表达式UserIdIsEqualTo(长userId)
{
返回bu=>bu.UserId==UserId;
}

如果我假设
BattleUserSpecifications.battleidisqualto(int battleId)
看起来像
return bu=>bu.battleId==battleId我在使用新规范时得到以下信息:

public static class BattleUserSpecifications
{
    public static Expression<Func<BattleUser, bool>> FilterByDateTime(
        IQueryable<BattleUser> battleUsers)
    {
        return bu => bu.DateTime == battleUsers
            .Where(bu1 => bu1.BattleId == bu.BattleId)
            .Max(bu2 => bu2.DateTime);
    }
    //...
}

这可能不是您想要的,只是一种解决方法。我可以复制您原始查询中的例外情况。一个“内部错误”看起来像是代码在内部遍历一条相当意外的路径,很可能只有MS/EF团队才能真正回答出问题所在。您可能需要重写查询以获得所需的结果。

我将再次尝试。如果您的目标是为每个battleid获取最新的battleuser,那么您可以使用此查询

    ctx.BattlesUsers.GroupBy(bu => bu.BattleId)
    .Select(bug => bug.OrderByDescending( bu => bu.DateTime).FirstOrDefault())

如果您想在此时使用表达式函数对其进行过滤,您可以,但您需要从外部获取您的用户ID,然后通过附加在末尾的Where子句将其传入。

BATTERIDISQUALTO()
的返回类型是什么,它做了什么/是如何实现的?@svick,expression我们可以看看你的
battleIDisqualto
吗,这样我们就知道我们在做什么了?@Marc gravel,我已经在更新部分添加了代码
var query = ctx.BattlesUsers.Where(
    BattleUserSpecifications.FilterByDateTime(ctx.BattlesUsers));
    ctx.BattlesUsers.GroupBy(bu => bu.BattleId)
    .Select(bug => bug.OrderByDescending( bu => bu.DateTime).FirstOrDefault())