Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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
C# Linq查询EntityCommandExeceptionException错误_C#_Linq_Entity Framework_Asp.net Web Api - Fatal编程技术网

C# Linq查询EntityCommandExeceptionException错误

C# Linq查询EntityCommandExeceptionException错误,c#,linq,entity-framework,asp.net-web-api,C#,Linq,Entity Framework,Asp.net Web Api,当我从下面的查询中调用“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.D

当我从下面的查询中调用“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);
        }      
var data=db.database_bd.AsQueryable();
if(query.startDate!=null)
{
data=data.Where(c=>c.UploadDate>=query.startDate);
}
//如果指定了任何其他筛选器,则返回与其中任何筛选器匹配的记录:
var filteredData=新列表();
如果(!string.IsNullOrEmpty(query.name))
{
var id=query.name.Split(',');
foreach(id中的字符串i)
{
Add(data.Where(c=>c.Name!=null&&c.Name.Contains(i));
}
}
//如果未通过任何筛选器,则返回所有数据。
//否则,请使用Union方法组合各个过滤器
//返回至少与一个筛选器匹配的所有记录。
如果(filteredData.Count!=0)
{
数据=filteredData.Aggregate(Queryable.Union);
}
if(!data.Any())//导致错误的行
{
var message=string.Format(“未找到数据”);
返回请求.CreateErrorResponse(HttpStatusCode.NotFound,消息);
}
返回请求.CreateResponse(HttpStatusCode.OK,数据);
}      
查询类:

public class Query
 {
    public string name { get; set; }
    public Nullable<DateTime> startDate { get; set; }
    public Nullable<DateTime> endDate { get; set; }
 }
公共类查询
{
公共字符串名称{get;set;}
公共可为空的起始日期{get;set;}
公共可为空的结束日期{get;set;}
}
我尝试向“filterdata”方法添加一个范围,但无法实现。如有任何建议,将不胜感激

谢谢

我会使用它(查看文档中的“安装”)

var data=db.database_bd.AsQueryable();
var mainPredicate=PredicateBuilder.True();
if(query.startDate!=null)
mainPredicate=mainPredicate.And(c=>c.UploadDate>=query.startDate);
如果(!string.IsNullOrEmpty(query.name))
{
var name predicate=PredicateBuilder.False();
var id=query.name.Split(',');
foreach(id中的变量id){
namePredicate=namePredicate.Or(c=>c.Name!=null&&c.Name.Contains(id));
}
mainPredicate=mainPredicate.And(namePredicate);
}
data=data.Where(main谓词);
if(!data.Any())//希望不会导致更多错误
{
var message=string.Format(“未找到数据”);
返回请求.CreateErrorResponse(HttpStatusCode.NotFound,消息);
}
这不行吗

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)));
}

那么,您希望使用firstFilter(startDate)或其他筛选器(query.name)组合数据吗?我希望能够使用(name)参数调用(startDate),但如果可能,可以过滤许多(name)参数值(1-70)。所以作为回答——数据和其他过滤器(query.name)结合在一起。谢谢你的回复。谢谢你的回复。很抱歉通知您,上面的代码给了我以下错误,'API09oct.database_bd'不包含'list'的定义,并且找不到接受'API09oct.database_bd'类型的第一个参数的扩展方法'list'(是否缺少using指令或程序集引用?)。我以前尝试过添加(列表),但它也给了我一个类似的错误。哦,对不起,我想我在最后一行代码上有一个输入错误,显然你需要访问列表,而不是pr.list。对不起,我最初尝试过删除(pr),但它给了我另一个错误--委托'System.Func'。非常感谢您的时间和帮助。这很奇怪,我刚刚在本地测试了它,它工作得非常好。你的域模型有什么奇怪的地方吗?是的,小写字母在那里,显然你应该能够解释编译器的错误。非常感谢你的帮助和时间。我很抱歉地通知您,上面的查询速度非常慢,它不会从搜索条件输出结果,而是转储整个数据集记录。如果可能的话,请提出建议。
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)));
}