将 .Select() 内的方法的 LINQ 方法语法转换为 LINQ 查询语法

Convert LINQ method syntax with method withing .Select() to LINQ query syntax

我目前有以下代码:

dataSource.Where(row => row.Value == 1)
          .Select(row => {row["Text"] = translatedText; return row;})
          .Single();

所以我的目标是 select 带有 "Value=1" 的数据行,同时将 "Text" 列中的值设置为其他值(在我的例子中是一个字符串-变量 transalatedText).

这已经适用于上述方法链,但我通常更喜欢 LINQ 语法。是否可以将此方法链转换为 LINQ?

我的问题是我不知道如何将 Select 方法中的函数转换为 LINQ 格式。我不想创建新的 DataRow,而是想真正编辑 selected 的。 (所以我不想使用 from x in y where z select new DataRow(...),但如果可能的话要真正编辑我的 x

谢谢!

Is there a possibility to translate this method chain to LINQ?

("to LINQ" 我相信你的意思是 "to query expression syntax"。)

不直接,不。实际上,您只能将表达式体 lambda 表达式转换为查询语法。这是有充分理由的:LINQ 的设计 不会 有副作用,而你的 "query" 确实 有副作用。

我会像这样亲自编写您的代码:

var row = DataSource.Single(row => row.Value == 1);
row["Text"] = translatedText;

这巧妙地将查询与副作用区分开来。如果您真的,真的想要使用查询表达式语法,您可以写:

var query = (from row in DataSource
             where row.Value == 1)
             select HorribleMutatingMethod(row)).Single();
...

private DataRow HorribleMutatingMethod(DataRow row)
{
    row["Text"] = translatedText;
    return row;
}

...但请不要。