如何使用linq搜索多个参数 [英] How to search multiple parameters using linq
问题描述
亲爱的,
当我尝试查询时(/ api / data?name = storm,prestl,bcam& tag = 78473TAC4,12669VAC2,05946XYZ0)。
我收到(没有数据)回复。我已经测试了查询及其对我的sql的值,并能够输出10条记录。
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)));
}
if (!string.IsNullOrEmpty(query.tag))
{
var list = query.tag.split(' ,'跨度>);
data = data.Where(pr = > list.Any(pr2 = > pr.TAG.Contains(PR2)));
}
以下更新代码:
var filteredData = new 列表< IQueryable< database_bd>>();
if (!string.IsNullOrEmpty(query.tag))
{
var ids = query.tag.Split(' ,');
foreach ( string i in ids)
{
var list = data.Where(c = > c.TAG!= null && c.TAG.Contains(i))。AsQueryable();
filteredData.Add(list);
}
}
if (filteredData.Count!= 0 )
{
data = filteredData.Aggregate(Queryable.Union);
}
我遇到错误 (ExceptionMessage:部分内容您的SQL语句嵌套得太深了。重写查询或将其分解为较小的查询。)当我运行查询时如下:
api / test?tag = 78473,12669,05946,
45660,02150,12667,4566,3622,38379,
61755,45660,3384,288,23242,81378 ,
68402,59025,59024,59024,59023,12669,
76111,86359,05946,05946
01448,07387,14889, 22545,3136,38137,49638
请帮忙。如果可能的话,非常感谢任何建议。
var yourList = declare-your-list
if (!string.IsNullOrEmpty(query.name))
{
var lists = query.name.split(' ,跨度>);
foreach ( var l 在列表中)
{
if (data.Where(pr = > pr.Name.Contains(l))!= null )
{
yourList.AddRange(data。 Where(pr = > pr.Name.Contains(l)));
}
}
}
以上我展示了如何为代码片段的一部分执行此操作。对其他部分尝试相同的操作并将其添加到 yourList 列表中并获取最终筛选列表。我希望这对您有所帮助。如果您有进一步的问题,请问。 :)
Dear all,
When I try to query(/api/data?name=storm,prestl,bcam&tag=78473TAC4,12669VAC2,05946XYZ0).
I am getting (no data) response. I have tested the query with its values against my sql and its able to output 10 records.
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)));
}
if (!string.IsNullOrEmpty(query.tag))
{
var list = query.tag.split(',');
data = data.Where(pr => list.Any(pr2 => pr.TAG.Contains(pr2)));
}
The following updated code:
var filteredData = new List<IQueryable<database_bd>>();
if (!string.IsNullOrEmpty(query.tag))
{
var ids = query.tag.Split(',');
foreach (string i in ids)
{
var list = data.Where(c => c.TAG != null && c.TAG.Contains(i)).AsQueryable();
filteredData.Add(list);
}
}
if (filteredData.Count != 0)
{
data = filteredData.Aggregate(Queryable.Union);
}
I am experiencing an error (ExceptionMessage":"Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.) when I run a query such as:
api/test?tag = 78473,12669,05946,
45660,02150,12667,4566,3622,38379,
61755,45660,3384,288,23242,81378,
68402,59025,59024,59024,59023,12669,
76111,86359,05946,05946
01448,07387,14889,22545,3136,38137, 49638
Please help. Any advice, would be much appreciated, if possible.
var yourList = declare-your-list if (!string.IsNullOrEmpty(query.name)) { var lists = query.name.split(','); foreach(var l in lists) { if (data.Where(pr => pr.Name.Contains(l)) !=null) { yourList.AddRange(data.Where(pr => pr.Name.Contains(l))); } } }
Above I have showed how to do it for the one part of your code snippet.So try the same for other parts and add it into yourList List and get finally filtered list.I hope this will help to you.If you have further issues,Please ask. :)
这篇关于如何使用linq搜索多个参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!