我想改变一个LINQ查询结果对象的一些属性,而不需要创建一个新的对象和手动设置每个属性。这可能吗?

例子:

var list = from something in someList
           select x // but change one property

当前回答

使用ForEach

var list = from something in someList;
list.ForEach(x => x.Property = value);

其他回答

我不确定查询语法是什么。下面是扩展的LINQ表达式示例。

var query = someList.Select(x => { x.SomeProp = "foo"; return x; })

它所做的是使用匿名方法vs和表达式。这允许您在一个lambda中使用多个语句。因此,您可以将设置属性和返回对象这两个操作结合到这个稍微简洁的方法中。

使用ForEach

var list = from something in someList;
list.ForEach(x => x.Property = value);

这是最简单的解决方案: 列表。其中(t => t. id == 1). tolist()。ForEach(t => t. property = "something");

尝试和工作,引用于此: https://visualstudiomagazine.com/articles/2019/07/01/updating-linq.aspx

在2020年,我使用MoreLinq管道方法。https://morelinq.github.io/2.3/ref/api/html/M_MoreLinq_MoreEnumerable_Pipe__1.htm

我遇到了确切的要求(OP的问题),我没有看到在任何地方用表达来回答。

假设x是MyType类型,您可以调用一个返回MyType的方法,该方法接受x。在该方法中,您可以做所有您想做的修改。代码看起来像这样。

var list = from something in someList
           select GetModifiedObject(x); // but change one property

private MyType GetModifiedObject(MyType x)
{
   x.Property1 = "Changed Value";
   return x;
}