C# 有没有办法在一个LINQ查询中做到这一点?
我在想,使用C# 有没有办法在一个LINQ查询中做到这一点?,c#,linq,C#,Linq,我在想,使用.Where(),这是可能的 public void removeexpiredentials(列表条目) { foreach(entries.Where(x=>x.IsExpired())中的var条目) { entry.Item.QuantityInjects-=entry.Quantity; } entries.RemoveAll(x=>x.IsExpired()); } 我看不到一个(可读的)解决方案,可以用一条语句来完成。您所做的不是“查询”,而是对使用Where已找到的某
.Where()
,这是可能的
public void removeexpiredentials(列表条目)
{
foreach(entries.Where(x=>x.IsExpired())中的var条目)
{
entry.Item.QuantityInjects-=entry.Quantity;
}
entries.RemoveAll(x=>x.IsExpired());
}
我看不到一个(可读的)解决方案,可以用一条语句来完成。您所做的不是“查询”,而是对使用Where
已找到的某些项目的操作(或两个)
public void RemoveExpiredEntries(List<CartEntry> entries)
{
foreach (var entry in entries.Where(x => x.IsExpired()))
{
entry.Item.QuantityInCarts -= entry.Quantity;
}
entries.RemoveAll(x => x.IsExpired());
}
我可能会这样做:
var expiredEntries = entries.Where(x => x.IsExpired()).ToArray();
foreach (var entry in expiredEntries)
{
entry.Item.QuantityInCarts -= entry.Quantity;
}
entries.RemoveAll(expiredEntries );
或
事实上,这两者与你所做的并没有太大的不同。将foreach
替换为。foreach
看起来更像linq,但变化不大
您还可以考虑在包含和管理列表的类中的“Acthix>封装/<强>”AdoMar操作“ReaveEnvutt”:
class Cart
{
List<CartEntry> entries;
public void RemoveEntry(CartEntry entry)
{
entry.Item.QuantityInCarts -= entry.Quantity;
entries.Remove(entry);
}
public void RemoveExpiredEntries()
{
foreach (var entry in entries.Where(x => x.IsExpired()).ToArray())
{
RemoveEntry(entry);
}
}
}
class购物车
{
列出条目;
公共无效删除入口(删除入口入口)
{
entry.Item.QuantityInjects-=entry.Quantity;
条目。删除(条目);
}
public void RemoveExpiredEntries()的删除
{
foreach(entries.Where(x=>x.IsExpired()).ToArray()中的var条目)
{
迁移(进入);
}
}
}
枚举集合时不能修改集合。因此,不能应用LINQ表达式
LIN*Q*是为支持查询而设计的,根据定义,查询不会修改它们的源代码。我只能看到您用一行代码来完成查询,但这不是最好的阅读方式
public void RemoveExpiredEnties(List<CartEntries> entries)
{
(entries.Where(e => e.IsExpired).ToList()).ForEach(item => entries.Remove(item));
}
public void removeExpiredentials(列表条目)
{
(entries.Where(e=>e.IsExpired.ToList()).ForEach(item=>entries.Remove(item));
}
您是否打算再更改代码?它现在与原始代码有很大的不同。。。如果我发布了我开始写的答案,很多答案都是无效的。更改项目数量然后删除它们有什么意义?它们是在其他地方引用的吗?@JonSkeet原始代码没有编译。我一直在胡闹,结果发布了错误的版本。
public void RemoveExpiredEnties(List<CartEntries> entries)
{
(entries.Where(e => e.IsExpired).ToList()).ForEach(item => entries.Remove(item));
}