代码之家  ›  专栏  ›  技术社区  ›  drovani

为每个项目中的字段赋值的扩展方法?

  •  2
  • drovani  · 技术社区  · 17 年前

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

    我正在寻找以下线索:

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

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

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

    3 回复  |  直到 17 年前
        1
  •  5
  •   Jon Skeet    17 年前

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

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

    完全

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

    即使您想要执行单个“where”或“select”,我通常也会使用点表示法:

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

    仅在使代码更简单的地方使用查询表达式:)

        2
  •  2
  •   user83286 user83286    17 年前
    public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action)
    {
        foreach (var item in sequence)
        {
            action(item);
        }
    }
    
        3
  •  1
  •   andleer    17 年前

    列表上有一个foreach<>。大致大致可以这样说:

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