Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法在一个LINQ查询中做到这一点?_C#_Linq - Fatal编程技术网

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));
    }