我目前有以下代码:
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;
}
但请不要。