C# LINQ:convert.Single()到查询表示法

C# LINQ:convert.Single()到查询表示法,c#,linq,C#,Linq,所以我知道查询符号 var word = from s in stringList where s.Length == 3 select s; 相当于点符号 var word = stringList .Where(s => s.Length == 3) .Select(s => s); 但是如何将这个点表示法转换为查询表示法呢 var word = wordsList

所以我知道查询符号

var word = from s in stringList
           where s.Length == 3
           select s;
相当于点符号

var word = stringList
           .Where(s => s.Length == 3)
           .Select(s => s);
但是如何将这个点表示法转换为查询表示法呢

var word = wordsList
           .Single(p => p.Id == savedId);

我在谷歌上找不到太多的资源。

Single
在查询符号上没有完全相同的符号


你能做的最好的事情就是把你的查询用括号括起来,然后自己打电话。

你不能。很多LINQ函数不能在查询语法中使用。充其量,您可以将两者结合起来并执行以下操作

var word = (from p in wordsList
            where p.Id == savedId
            select p).Single()
但在一个简单的例子中,“点符号”对我来说似乎更具可读性


有一个LINQ on使用的关键字列表,您可以从该列表中看到哪些函数集成到语言中。

您唯一能做的是:

var word = (from w in wordsList
            where w.Id == savedId
            select w).Single();
但是它将不完全相同。它将转变为

var word = wordsList
           .Where(p => p.Id == savedId)
           .Single();

Single不是查询符号的一部分。您可以将第一个示例更改为以下内容,以实现您的目标:

var word = (from s in stringList where s.Length == 3 select s).Single();

但是它不会被准确地翻译成
Single(condition)
@MarcinJuraszek那么你可以在需要时在
Single
中添加一个条件。@Vache…这正是OP要求转换的内容。@JonathonReinhart条件在where中。还是我不明白你在说什么?@Vache你说“你可以在
单曲中添加一个条件”。。。在我看来,
.Where(predicate).Single()
.Single(predicate)
在功能上是相同的,并且会表现出相同的运行时性能。它们在功能上是相同的,但并不完全相同。但我对表演不太确定。它们应该是真的,真的很小的区别,你永远不应该带着它们。嗯……哦,我知道为什么
Single()
在看到第二个项时引发异常,
Single(谓词)
迭代整个集合,即使在前面看到第二个匹配元素时也是如此!在这种情况下,只需使用点符号即可。这是(向程序员)传达您要做的事情的最干净、最简洁的方式。