我有一个查询表达式列表,我想使用其中的值,但我不想使用foreach,因为如果找到正确的值,我不希望它再次循环。
var partnerProduct = GetPartnerProducts();
var duesproductP = partnerProduct.ToList();
foreach (var c in duesproductP)
{
//I wont include all the code in between but there are 3 if clauses
}
我不能使用SingleOrDefault,因为有多个值而且我不能使用firstordefault,因为它只会给我找到它在我之间的所有子句中找到的第一个值。在我的其他方面,我有标准,我可以这样排序:
var duesproductsB = sectionB.Where(o => o.capg_MinCriteria.Value <= dues).ToList().OrderByDescending(o => o.capg_MaxCriteria).FirstOrDefault();
但现在我不能,因为没有最小值或最大值,返回的唯一值是价格和Id。它适用于第一个选项和最后一个选项,但不适用于第二个选项。第二个if子句不起作用,因为它保持循环并假设错误的答案。请记住,GetPartnerProducts()是一个查询表达式
答案 0 :(得分:4)
为什么不简单地检查一下这个值是否符合预期,然后突破循环?或者我不正确地理解某事?
答案 1 :(得分:1)
但我不想使用foreach,因为如果它找到正确的值, 我不希望它再循环。
如果我理解正确,你想要的是退出foreach循环而不完成整个列表的循环。
您可以这样做:
foreach (var c in duesproductP)
{
if(somecondition_met)
break; //this will exit the for loop
}
答案 2 :(得分:0)
break
:
List<bool> conditionsFound = new List<bool> {false,false,false};
foreach (var c in duesproductP)
{
if(condition1)
{
// do something
conditionsFound[0] = true;
}
if(condition2)
{
// do something
conditionsFound[1] = true;
}
if(condition3)
{
// do something
conditionsFound[2] = true;
}
if(conditionsFound.All())
break;
}
答案 3 :(得分:0)
或者如果你也想避免使用休息;在满足条件时简单地给出一个return语句。