Linq查询EntityCommandExeceptionException错误

本文关键字:错误 EntityCommandExeceptionException 查询 Linq | 更新日期: 2023-09-27 17:59:54

当我调用‘api/test/name=stop,tap,app。。。(24个名称值)'从下面的查询中,我遇到了一个错误:

"Message":"An error has occurred.","ExceptionMessage":"Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.","ExceptionType":"System.Data.SqlClient.SqlException

Linq查询:

        var data = db.database_bd.AsQueryable();
            if (query.startDate != null)
            {
                data = data.Where(c => c.UploadDate >= query.startDate);
            }
            // If any other filters are specified, return records which match any of them:
            var filteredData = new List<IQueryable<database_bd>>();
            if (!string.IsNullOrEmpty(query.name))
            {
                var ids = query.name.Split(',');
                foreach (string i in ids)
                {
                    filteredData.Add(data.Where(c => c.Name != null && c.Name.Contains(i)));
                }
            }
            // If no filters passed, return all data.
            // Otherwise, combine the individual filters using the Union method
            // to return all records which match at least one filter.
            if (filteredData.Count != 0)
            {
                data = filteredData.Aggregate(Queryable.Union);
            }
            if (!data.Any()) //line causing error
            {
                var message = string.Format("No data was found");
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, message);
            }
            return Request.CreateResponse(HttpStatusCode.OK, data);
        }      

查询类别:

public class Query
 {
    public string name { get; set; }
    public Nullable<DateTime> startDate { get; set; }
    public Nullable<DateTime> endDate { get; set; }
 }

我尝试向"filterdata"方法添加一个范围,但无法实现。如有任何建议,我们将不胜感激。

感谢

Linq查询EntityCommandExeceptionException错误

这不管用吗?

var data = db.database_bd.AsQueryable();
if (query.startDate != null)
{
    data = data.Where(c => c.UploadDate >= query.startDate);
}
if (!string.IsNullOrEmpty(query.name))
{
    var list = query.name.Split(',');
    data = data.Where(pr => list.Any(pr2 => pr.Name.Contains(pr2)));
}

我会使用predictebuilder(查看文档中的"installation")。

var data = db.database_bd.AsQueryable();
var mainPredicate = PredicateBuilder.True<database_bd>();

if (query.startDate != null)
    mainPredicate = mainPredicate.And(c => c.UploadDate >= query.startDate);
if (!string.IsNullOrEmpty(query.name))
{
    var namePredicate = PredicateBuilder.False<database_bd>();
    var ids = query.name.Split(',');
    foreach (var id in ids) {
       namePredicate = namePredicate.Or(c => c.Name != null && c.Name.Contains(id));
    }
    mainPredicate = mainPredicate.And(namePredicate);
}
data = data.Where(mainPredicate );
if (!data.Any()) //line hopefully causing no more error
{
     var message = string.Format("No data was found");
     return Request.CreateErrorResponse(HttpStatusCode.NotFound, message);
}