使用带有.Select()到LINQ查询语法的方法转换LINQ方法语法

时间:2015-04-09 14:59:29

标签: c# .net linq select lambda

我目前有以下代码:

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

所以我的目标是选择“Value = 1”的DataRow,同时将“Text”列中的值设置为其他值(在我的例子中是一个字符串变量transalatedText)。

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

  

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

(通过“to LINQ”我相信你的意思是“查询表达式语法”。)

不直接,不。实际上,您只能将表达式的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;
}

...但请不要。