我想根据输入的数字动态创建查询并将其设置为数组以从视图中获取数据,因此我可以创建条件来过滤它,但我的查询仅适用于 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.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]));
}
有没有办法让它动态,所以我可以输入我想要的申请号码?
4 回答
让我们概括一下这个问题:如果我们想要实现一个任意的
listReqNumber
数组或者 - 让我们摆脱
||
- 我们希望p.RequisitionNumber
中包含any
项目req
和listReqNumber
可惜,我们不能把
any req in listReqNumber
但我们可以交换listReqNumber
和p.RequisitionNumber
并最终有一个有效的查询:如果你这样直接使用怎么样:
您可以使用动态linq . 链接在这里:https://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library
然后有一个像下面这样的功能:
在Main中创建如下的查询:
然后使用动态linq像: