如何使用点符号样式编写let子句

Kev*_*nle 14 linq syntax

使用查询表达式样式,可以轻松编写let子句.我的问题是如何使用点符号样式来编写let子句.

Jon*_*eet 18

基本上它是Select(在大多数情况下)引入透明标识符 - 通过匿名类型封装所有当前指定的范围变量.例如,这个查询:

string[] names = { "Jon", "Mark" };

var query = from name in names
            let length = name.Length
            where length > 3
            select name + ": " + length;
Run Code Online (Sandbox Code Playgroud)

被翻译成这样的东西:

var query = names.Select(name => new { name, length = name.Length })
                 .Where(z => z.length > 3)
                 .Select(z => z.name + ": " z.length);
Run Code Online (Sandbox Code Playgroud)

  • @Khnle:这可能是个人偏好的问题.在这种情况下,我实际上更喜欢点符号的外观.一旦你习惯了lambda语法,它就很容易阅读,更能描述实际发生的事情,并且不需要`let`语句的额外语法糖. (4认同)
  • 不要批评你的答案(相反我很欣赏它),但是因为我可以使用let子句来编写更复杂的方法,并且在你的例子中,点符号已经比查询exp对应的更长,更不易读,我认为这是另一种情况,其中查询exp比点国更优选.我知道的另一个案例涉及编写联接.你同意这个观察吗?感谢您的回答. (2认同)
  • @Khnle:是的 - 我通常发现引入透明标识符(包括let和join)的查询表达式比它们的点表示法更具可读性.罗伯特是对的 - 这绝对是个人偏好. (2认同)