C# 如何使用for循环创建动态查询?
我想根据输入的数字动态创建查询,并将其设置为数组以从视图中获取数据,这样我就可以创建条件对其进行过滤,但我的查询仅适用于输入的3数字C# 如何使用for循环创建动态查询?,c#,linq,visual-studio-2010,C#,Linq,Visual Studio 2010,我想根据输入的数字动态创建查询,并将其设置为数组以从视图中获取数据,这样我就可以创建条件对其进行过滤,但我的查询仅适用于输入的3数字 var query = from bs in dc.VwResourceAssignments select bs; var listReqNumber = new[] {123, 456, 789}; 我目前的查询是: if (listReqNumber.Length == 1) { query = query.Where(p => p.Req
var query = from bs in dc.VwResourceAssignments select bs;
var listReqNumber = new[] {123, 456, 789};
我目前的查询是:
if (listReqNumber.Length == 1)
{
query = query.Where(p => p.RequisitionNumber.Contains(listReqNumber[0]));
}
else if (listReqNumber.Length == 2)
{
query = query.Where(p => p.RequisitionNumber.Contains(listReqNumber[0]) ||
p.RequisitionNumber.Contains(listReqNumber[1]));
}
else if (listReqNumber.Length == 3)
{
query = query.Where(p => p.RequisitionNumber.Contains(listReqNumber[0]) ||
p.RequisitionNumber.Contains(listReqNumber[1]) ||
p.RequisitionNumber.Contains(listReqNumber[2]));
}
有没有什么方法可以动态设置,以便我可以输入任意数量的请购单编号?如果您直接这样使用:
var result = from p in query where listReqNumber.Contains(p.RequisitionNumber) select p;
var data=query.Where(q=>
q、 requisionnumber.Any(w=>listReqNumber.Contains(w))
);
您可以使用动态linq。链接如下:
然后使用如下函数:
string GetQuery(int num)
{
return $"p.RequisitionNumber.Contains(listReqNumber[{num}])";
}
在Main中创建一个查询,如下所示:
string testQuery = string.Empty; // or use StringBuilder then convert to string.
int length = 4;
for (int temp = 1; temp <= length; temp ++)
testQuery += testQuery.Length == 0 ? GetQuery(temp - 1) : " || " + GetQuery(temp);
让我们概括一下这个问题:如果我们有一个任意的listReqNumber
数组,我们就要实现它
query = query.Where(
p => p.RequisitionNumber.Contains(listReqNumber[0]) ||
p.RequisitionNumber.Contains(listReqNumber[1]) ||
...
p.RequisitionNumber.Contains(listReqNumber[listReqNumber.Length - 1])
);
或者-让我们去掉|
-我们希望任何项目req
中包含列表需求编号
的p.requisionnumber
// doesn't compile - just the idea
query = query.Where(p => p.RequisitionNumber.Contains(any req in listReqNumber));
遗憾的是,我们无法将任何请求放入listReqNumber
中,但我们可以交换listReqNumber
和p.RequisitionNumber
,最终得到一个有效的查询:
query = query.Where(p => listReqNumber.Any(req => p.RequisitionNumber.Contains(req)));
我建议搜索predicatebuilder类-这是一个已解决的问题,因此您应该使用在visual studio 2010上运行的luckis??您不应该使用vs2010。我们现在正接近2018年底,与2019年的对比已经在预览中。强烈建议您升级我仍在开发使用VS2010、的旧项目,其中(p=>listReqNumber.Any(req=>p.Contains(req))代码>或使用您已经使用的语法var result=query.Where(p=>listReqNumber.Contains(p.requisionnumber)
我以前试过,但如果requisionNumber完全相同,例如,数据库中的数据是45321,我输入的数字是453,那么结果是什么都没有,我必须输入45321,有什么想法吗?
query = query.Where(p => listReqNumber.Any(req => p.RequisitionNumber.Contains(req)));