';参数';f';未绑定到指定的LINQ to Entities查询表达式';中;

本文关键字:Entities to 查询 表达式 LINQ 查询表 参数 绑定 | 更新日期: 2023-09-27 18:30:12

使用EF 6。有人能告诉我我做错了什么吗?

public List<SearchResult> SearchDocuments(List<SearchCriteria> searchCriterias)
{
    List<SearchResult> results = new List<SearchResult>();
    var fieldSettings = LoadCoordinateSystemFieldSettings(searchCriterias);
    using (var context = CreateContext())
    {
        var tractsQuery = PredicateBuilder.False<v_UploadByTract_ActiveUploads>();
        foreach (var searchCriteria in searchCriterias)
        {
            var queryBuilder = PredicateBuilder.True<v_UploadByTract_ActiveUploads>();
            // tractsQuery
            if (searchCriteria.StateAPI.HasValue)
                queryBuilder = queryBuilder.And(a => a.StateAPI == searchCriteria.StateAPI.Value);
            if (searchCriteria.CountyAPI.HasValue)
                queryBuilder = queryBuilder.And(a => a.CountyAPI == searchCriteria.CountyAPI.Value);
            // ...
            // ... many more similar IF-ANDs
            // ...
            tractsQuery = tractsQuery.Or(queryBuilder);
        }
        var searchQuery = context.v_UploadByTract_ActiveUploads.AsExpandable().Where(tractsQuery).ToList();
        //.Select(a => SearchResult.Create(a));
        //results.AddRange(searchQuery.ToList());
    }
    return results;
}
public static class PredicateBuilder
{
    public static Expression<Func<T, bool>> True<T>() { return f => true; }
    public static Expression<Func<T, bool>> False<T>() { return f => false; }
    public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,
                                                        Expression<Func<T, bool>> expr2)
    {
        var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
        return Expression.Lambda<Func<T, bool>>
              (Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
    }
    public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,
                                                         Expression<Func<T, bool>> expr2)
    {
        var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
        return Expression.Lambda<Func<T, bool>>
              (Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
    }
}

';参数';f';未绑定到指定的LINQ to Entities查询表达式';中;

感谢您的回答。另一篇帖子做到了。在其他地方,我遇到了AsExpandable(),却忽略了这篇文章,认为它在谈论同样的东西。在阅读了你的帖子并重新阅读了讨论之后,这就奏效了。由于你的帖子显示为"评论",我无法将其标记为答案。关于如何巩固那些讨厌的国际单项体育联合会的任何建议。

C#谓词生成器实体:参数';f';未绑定在指定的LINQ to Entities查询表达式中

对于其他在谷歌上搜索到这里的人,我的解决方案是在将修改后的表达式返回到表达式树之前Visit。这绑定了lambda参数。