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"方法添加一个范围,但无法实现。如有任何建议,我们将不胜感激。
感谢
这不管用吗?
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);
}