我有一个列表Guid,其中保留Guid了我的项目列表中的所有重复项:
IEnumerable<Guid> duplicateExists = ListOfMyItems
.GroupBy(x => x.ID)
.Where(group => group.Count() > 1)
.Select(group => group.Key);
Run Code Online (Sandbox Code Playgroud)
现在,我要检查是否存在重复,如果存在,请从中删除它的最后一次出现ListOfMyItems。DeleteItemFromOrder只是从数据库中删除一行。
这有效:
foreach (var item in duplicateExists)
{
_ = ListOfMyItems.Remove(ListOfMyItems.Last(x => x.ID == item));
MyLogic.DeleteItemFromOrder(Bill.ID, item);
return;
}
Run Code Online (Sandbox Code Playgroud)
虽然这将输入条件if,然后失败DeleteItemFromOrder,但告诉我duplicateExists - sequence contains no elements:
if(duplicateExists.Any())
{
_ = ListOfMyItems.Remove(ListOfMyItems.Last(x => x.ID == duplicateExists.First()));
MyLogic.DeleteItemFromOrder(Bill.ID, duplicateExists.First());
return;
}
Run Code Online (Sandbox Code Playgroud)
为什么第二个示例失败?
这是Linq 延迟执行的结果:
IEnumerable<Guid> duplicateExists = ListOfMyItems
.GroupBy(x => x.ID)
.Where(group => group.Count() > 1)
.Select(group => group.Key);
Run Code Online (Sandbox Code Playgroud)
系统实际上不执行查询;那你有
if (duplicateExists.Any())
{
_ = ListOfMyItems.Remove(ListOfMyItems.Last(x => x.ID == duplicateExists.First()));
MyLogic.DeleteItemFromOrder(Bill.ID, duplicateExists.First());
return;
}
Run Code Online (Sandbox Code Playgroud)
系统执行以下操作:
duplicateExists.Any()并获取true,因为存在重复项duplicateExists.First()获取重复项并将其从-中删除ListOfMyItemsListOfMyItems.RemoveduplicateExists.First()再次执行MyLogic.DeleteItemFromOrder,现在由于已被修改且没有重复项而失败 - 为空ListOfMyItemsduplicateExists快速补丁: 兑现了duplicateExists,迫使该系统执行集合中的查询和存储结果,例如数组:
IEnumerable<Guid> duplicateExists = ListOfMyItems
.GroupBy(x => x.ID)
.Where(group => group.Count() > 1)
.Select(group => group.Key)
.ToArray();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |