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

dro*_*ani 2 c# linq extension-methods iqueryable

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

我正在寻找以下内容:

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

en.Foreach()必不可少:

foreach(Entity foo in en){
   foo.Status = "Complete";
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 5

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

这有点违背了LINQ的精神,因为它只是副作用 - 但它确实很有用,所以我认为实用主义在这里胜过教条.

有一点需要注意 - 在您的示例中使用查询表达式确实没有意义.(这并不完全是多余的,但是如果你没有暴露这个值并不重要.)这里的选择并没有做任何有用的事情.你可以这样做:

IDB.Entities.ForEach(foo => foo.status = "Complete");
Run Code Online (Sandbox Code Playgroud)

即使你想做一个"where"或"select",我通常也会使用点符号:

IDB.Entities.Where(foo => foo.Name == "fred")
            .ForEach(foo => foo.status = "Complete");
Run Code Online (Sandbox Code Playgroud)

只使用查询表达式,它们实际上使代码更简单:)