我只需要获取查询的第一个值。我怎么能这样做?
Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "Jack");
dict.Add(2, "Peter");
dict.Add(3, "Chris");
dict.Add(4, "Peter");
var keys = from entry in dict where entry.Value == "Peter" select entry.Key limit 1;
如果我使用限制,我会收到错误。那么有什么其他方法可以限制输出或如何从查询中单独获得第一个结果?
错误CS0103当前上下文中不存在名称“限制”
答案 0 :(得分:2)
您也可以尝试这种语法...
var key = dict.FirstOrDefault(v => v.Value == "Peter").Key;
编辑:添加了易于理解/复制粘贴的代码... Rextester - http://rextester.com/AIAKRZ95654
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "Jack");
dict.Add(2, "Peter");
dict.Add(3, "Chris");
dict.Add(4, "Peter");
var key = dict.FirstOrDefault(v => v.Value == "Peter").Key;
Console.WriteLine(key);
}
}
}
更新:请注意,在使用FirstOrDefault()
关键字时,?.key
不是必需的,最糟糕的情况是它会返回0
。使用?.key
时需要First()
。由于这种混乱,Flater投票给了这个答案,并从下面的评论部分删除了他的评论。 (他可能应该承认并提到这个因素,以便其他程序员在First()
和FirstOrDefault()
之间的这种细微差别上提醒/警告标志
答案 1 :(得分:1)
在词典中可以有零项时使用First或FirstOrDefault:
var keys = (from entry in dict where entry.Value == "Peter" select entry.Key).FirstOrDefault();
答案 2 :(得分:1)
集合有四种方法,所有这些方法都返回集合中的一个项目:
<强>首先(条件)强>
获取满足条件的第一个项目,如果没有这样的项目,此方法将抛出异常。
<强> FirstOrDefault(条件)强>
为了获得满足条件的第一个项,如果没有这样的项,则此方法将返回null。
<强>单(条件)强>
获得满足条件的唯一项目。如果满足条件的项数大于或小于1,则此方法抛出异常。
<强>的SingleOrDefault(条件)强>
获得满足条件的唯一项目。如果满足条件的项数大于1,则此方法抛出异常。