将LINQ方法语法与方法within.Select()转换为LINQ查询语法



我目前有以下代码:

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

因此,我的目标是选择"Value=1"的DataRow,同时将"Text"列中的值设置为其他值(在我的情况下是字符串变量translatedText)。

这对于上面提到的方法链来说已经很好了,但我通常更喜欢LINQ语法。是否有可能将此方法链转换为LINQ?

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

谢谢!

是否有可能将此方法链转换为LINQ?

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

不是直接的。实际上,您只能将表达式体lambda表达式转换为查询语法。有一个很好的理由:LINQ被设计成而不是有副作用,而你的"查询"确实有副作用。

我个人会这样写你的代码:

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;
}

但请不要。

最新更新