如何解决linq,如果索引不同就知道跳过
我有一个名为DTOPriceLine的类的列表,该类包含10个属性,这些属性持有数量折价用于定价,它们都可以为null,这很好,但是如果其中至少一个不为null,则必须对其进行验证跳过。
例如,如果仅QtyBreak1New和QtyBreak3New不为空,则表示跳过QtyBreak2New(空),另一个示例是,如果仅QtyBreak2New不为空,则跳过QtyBreak1New,如果QtyBreak1New不为空,并且QtyBreak2New不为空,则全部很好。
业务规则是您不能跳过休息,它们必须是连续的。有更好的方法吗?
foreach(DTOPriceLine line in linesWithBreaksToValidate)
{
List<int> breakOrder = new List<int>();
if (line.QtyBreak1New.HasValue)
breakOrders.Add(1);
if (line.QtyBreak2New.HasValue)
breakOrders.Add(2);
if (line.QtyBreak3New.HasValue)
breakOrders.Add(3);
if (line.QtyBreak4New.HasValue)
breakOrders.Add(4);
if (line.QtyBreak5New.HasValue)
breakOrders.Add(5);
if (line.QtyBreak6New.HasValue)
breakOrders.Add(6);
if (line.QtyBreak7New.HasValue)
breakOrders.Add(7);
if (line.QtyBreak8New.HasValue)
breakOrders.Add(8);
if (line.QtyBreak9New.HasValue)
breakOrders.Add(9);
if (line.QtyBreak10New.HasValue)
breakOrders.Add(10);
var skipped = breakOrder.Select((x,i) => new { V = x,Index = i+1 }).Where(p => p.Index != p.V).Any();
}
解决方法
索引不仅在<link href="https://kendo.cdn.telerik.com/2020.3.915/styles/kendo.common-material.min.css" rel="stylesheet">
<link href="https://kendo.cdn.telerik.com/2020.3.915/styles/kendo.materialblack.min.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2020.3.915/js/kendo.all.min.js"></script>
<div id="grid"></div>
上可用,而且在Select
上可用:
Where(IEnumerable,Func<TSource,Int32,Boolean>)
因此,您的linq表达式可以缩短为:
Where
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。