可以通过多个值限制返回的结果
Possible to limit returned results by multiple values
我对这个有点恼火,我有一个来自查询的客户列表:
IQueryable<Customer> Customers()
{
return myDc.Customers;
}
此returns所有客户。
Customers
table 有两个额外的列,Risk 和 Status。 Risk 告诉我们我们与该客户有什么风险,Status 告诉我们他们的账户处于什么状态。
用户有一个搜索页面,他们 select 多个风险和状态。我将它们的 selected 值 捕获到一个 List
整数中,并想将其传递到我上面的查询中。
由于用户可以 select 多个风险值(和状态),如果我在 Customers
查询周围有一个 foreach
,它不会获得用户的所有风险 select即
foreach (int r in RisksList)
{
return Customers.Where(r=> r.Risk.Tostring().Contains(r.ToString());
}
执行上述查询时,它会将其限制为找到的第一个风险,但不会捕获 RisksList 中包含的任何其他风险。
我会对状态做同样的事情(一旦我有正确的风险记录)。
如何限制 RisksList
中包含的整数值找到的所有客户(然后限制 StatusList
)?
编辑 1
IQueryable<Customer> customers = from c in myDc.Customers select c;
foreach (int i in RisksList)
{
customers = from cc in customers where (RisksList.Contains(i)) select cc;
}
When the above query executes it limits it to the first Risk found,
but any other Risks contained within RisksList is not captured.
那是因为你的 return
语句在你的循环中。
您可以将其添加到结果列表中,而不是返回结果,或者您可以尝试更简洁的方法:
return Customers.Where(r=> RiskLists.Contains(r.Risk));
您的其他列表也一样。
删除 foreach
并只使用它。
return Customers.Where(r=> RisksList.Any(x=> r.Risk.ToString().Contains(x.ToString()));
我对这个有点恼火,我有一个来自查询的客户列表:
IQueryable<Customer> Customers()
{
return myDc.Customers;
}
此returns所有客户。
Customers
table 有两个额外的列,Risk 和 Status。 Risk 告诉我们我们与该客户有什么风险,Status 告诉我们他们的账户处于什么状态。
用户有一个搜索页面,他们 select 多个风险和状态。我将它们的 selected 值 捕获到一个 List
整数中,并想将其传递到我上面的查询中。
由于用户可以 select 多个风险值(和状态),如果我在 Customers
查询周围有一个 foreach
,它不会获得用户的所有风险 select即
foreach (int r in RisksList)
{
return Customers.Where(r=> r.Risk.Tostring().Contains(r.ToString());
}
执行上述查询时,它会将其限制为找到的第一个风险,但不会捕获 RisksList 中包含的任何其他风险。
我会对状态做同样的事情(一旦我有正确的风险记录)。
如何限制 RisksList
中包含的整数值找到的所有客户(然后限制 StatusList
)?
编辑 1
IQueryable<Customer> customers = from c in myDc.Customers select c;
foreach (int i in RisksList)
{
customers = from cc in customers where (RisksList.Contains(i)) select cc;
}
When the above query executes it limits it to the first Risk found, but any other Risks contained within RisksList is not captured.
那是因为你的 return
语句在你的循环中。
您可以将其添加到结果列表中,而不是返回结果,或者您可以尝试更简洁的方法:
return Customers.Where(r=> RiskLists.Contains(r.Risk));
您的其他列表也一样。
删除 foreach
并只使用它。
return Customers.Where(r=> RisksList.Any(x=> r.Risk.ToString().Contains(x.ToString()));