2

我本可以发誓已经为 Queryable 类构建了一个扩展方法,但我找不到,但也许我在想一些不同的东西。

我正在寻找类似的东西:

IQueryable<Entity> en = from e in IDB.Entities select e;
en.ForEach(foo => foo.Status = "Complete");

en.Foreach() 必须执行:

foreach(Entity foo in en){
   foo.Status = "Complete";
}

这已经写了吗?如果没有,是否可以编写所述扩展方法,最好允许任何 LINQ 表和该表上的任何字段。从哪里开始是个好地方?

4

3 回答 3

5

基类库中没有任何内容。然而,许多开发人员在他们自己的公共库中都有这个,我们在MoreLINQ中也有。

这有点违背 LINQ 的精神,因为它都是关于副作用的——但它真的很有用,所以我认为实用主义在这里胜过教条。

需要注意的一件事 - 在您的示例中使用查询表达式确实没有意义。(这并不完全是多余的,但如果你不公开值也没关系。) select 在这里没有做任何有用的事情。你可以这样做:

IDB.Entities.ForEach(foo => foo.status = "Complete");

即使你想做一个单一的“where”或“select”,我通常会使用点表示法:

IDB.Entities.Where(foo => foo.Name == "fred")
            .ForEach(foo => foo.status = "Complete");

仅在它们实际上使代码更简单的地方使用查询表达式:)

于 2009-03-28T07:16:02.063 回答
2
public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action)
{
    foreach (var item in sequence)
    {
        action(item);
    }
}
于 2009-03-28T02:16:31.800 回答
1

List<> 上有一个 foreach。大致如下:

IQueryable<Entity> en = from e in IDB.Entities select e;
en.ToList().ForEach(foo => foo.status = "Complete");
于 2009-03-28T02:16:07.993 回答