“该参数未在指定的LINQ to Entities查询表达式中绑定。”规格模式和

问题描述 投票:0回答:1

我遵循here中描述的规范模式实现。我有一个类似这样的存储库方法:

public IEnumerable<MyDto> Find(Specification<Dto> specification)
{
    return myDbContext.MyDtos.Where(specification.ToExpression()).Take(20).ToList();
}

如果我使用普通的非复合规范,它就可以正常工作,但是以下情况失败,并显示消息“在指定的LINQ to Entities查询表达式中未绑定参数'r'。”]

Specification<MyDto> spec = new Spec1(someCriterion)
    .And(new Spec2(someCriterion))
    .And(new Spec3(someCriterion))
    // etc...

var myDtos = repo.Find(spec);

到目前为止,我所读到的内容与所有表达式的参数引用都不相同,但是我不确定如何解决此问题。

供参考,这是我的代码中AndSpecification<T>类的外观:

public class AndSpecification<T> : Specification<T>
{
    private readonly Specification<T> _left;
    private readonly Specification<T> _right;

    public AndSpecification(Specification<T> left, Specification<T> right)
    {
        _left = left;
        _right = right;
    }

    public override Expression<Func<T, bool>> ToExpression()
    {
        Expression<Func<T, bool>> leftExpression = _left.ToExpression();
        Expression<Func<T, bool>> rightExpression = _right.ToExpression();

        BinaryExpression andExpression = Expression.AndAlso(
            leftExpression.Body, rightExpression.Body);

        return Expression.Lambda<Func<T, bool>>(
            andExpression, leftExpression.Parameters.Single());
    }
}
c# entity-framework linq linq-to-sql repository-pattern
1个回答
0
投票

问题出在您的ToExpression方法中。

© www.soinside.com 2019 - 2024. All rights reserved.