Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 为每个项目中的字段赋值的扩展方法?_C#_Linq_Extension Methods_Iqueryable - Fatal编程技术网

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

C# 为每个项目中的字段赋值的扩展方法?,c#,linq,extension-methods,iqueryable,C#,Linq,Extension Methods,Iqueryable,我可以发誓已经为我找不到的Queryable类构建了一个扩展方法,但也许我在想一些不同的东西 我正在寻找类似于: IQueryable<Entity> en = from e in IDB.Entities select e; en.ForEach(foo => foo.Status = "Complete"); 这已经写好了吗?如果不是,则可以编写所述扩展方法,最好允许任何LINQ表和该表上的任何字段。哪里是开始的好地方?列表上有一个foreach。大致大致可以这样说: I

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

我正在寻找类似于:

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

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

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

IQueryable<Entity> en = from e in IDB.Entities select e;
en.ToList().ForEach(foo => foo.status = "Complete");
IQueryable en=来自IDB中的e。实体选择e;
en.ToList().ForEach(foo=>foo.status=“Complete”);
公共静态void ForEach(此IEnumerable序列,Action-Action)
{
foreach(序列中的var项目)
{
行动(项目);
}
}

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

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

需要注意的一点是,在您的示例中使用查询表达式实际上毫无意义。(这并不完全是多余的,但如果您不公开该值,这并不重要。)select在这里没有做任何有用的事情。您只需执行以下操作:

IDB.Entities.ForEach(foo => foo.status = "Complete");
即使您想要执行单个“where”或“select”,我通常也会使用点表示法:

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

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

什么是实体类,由您定义的类。如果是这样的话,那么你必须写status属性,对吗?@gisrearch,他创建实体的事实无关紧要。我建议使用不同的名称,以避免列表上的冲突。也许每一个(…)@塞缪尔,我不会。这两个函数都做相同的事情,因此您不介意无法在列表中轻松调用此版本。这样,你就可以在任何IEnumerable`1-a列表上使用ForEach了。这个答案非常有用。我的问题的另一部分是知道关键字来构建我自己的扩展方法来执行序列中每个项的操作。“行动”代表让我找到了简化各种问题修复的正确途径。谢谢。非常清晰的回答,我感谢你的回答。实际的查询表达式要复杂得多;为了问题的简单,我把它简化了。另外,感谢您链接到MORELinq。我在那里发现了很多有用的东西,就在那里!我怀疑这个功能已经在这里了,我只是找不到合适的地方。把它放到一个列表中是完全可以接受的,这就是我所需要的。谢谢
IDB.Entities.ForEach(foo => foo.status = "Complete");
IDB.Entities.Where(foo => foo.Name == "fred")
            .ForEach(foo => foo.status = "Complete");