linq 使用first筛选出第一条数据
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
static void Main(string[] args)
{
List<Person> personL = new List<Person>();
personL.Add(new Person("wtq", "男", "13616009873", 23));
personL.Add(new Person("wta", "女", "13616009871", 24));
personL.Add(new Person("wtb", "男", "13616009872", 26));
personL.Add(new Person("wtc", "男", "13616009873", 25));
personL.Add(new Person("wtd", "男", "13616009874", 27));
personL.Add(new Person("wte", "女", "13616009875", 28));
personL.Add(new Person("wtf", "男", "13616009876", 29));
personL.Add(new Person("wtg", "男", "13616009877", 30));
personL.Add(new Person("wth", "女", "13616009878", 23));
var pr = from n in personL
where n.Age == 23
select new { myname = n.Name, mysex = n.Sex };
var pr1 = personL.First(c=>c.Age>28);
Console.WriteLine(pr1.Name);
var pr2 = pr.First(c=>c.myname=="wth");
Console.WriteLine(pr2.myname);
foreach (var item in pr)
{
Console.WriteLine(item.myname+" "+item.mysex);
}
Console.ReadLine();
}
{
List<Person> personL = new List<Person>();
personL.Add(new Person("wtq", "男", "13616009873", 23));
personL.Add(new Person("wta", "女", "13616009871", 24));
personL.Add(new Person("wtb", "男", "13616009872", 26));
personL.Add(new Person("wtc", "男", "13616009873", 25));
personL.Add(new Person("wtd", "男", "13616009874", 27));
personL.Add(new Person("wte", "女", "13616009875", 28));
personL.Add(new Person("wtf", "男", "13616009876", 29));
personL.Add(new Person("wtg", "男", "13616009877", 30));
personL.Add(new Person("wth", "女", "13616009878", 23));
var pr = from n in personL
where n.Age == 23
select new { myname = n.Name, mysex = n.Sex };
var pr1 = personL.First(c=>c.Age>28);
Console.WriteLine(pr1.Name);
var pr2 = pr.First(c=>c.myname=="wth");
Console.WriteLine(pr2.myname);
foreach (var item in pr)
{
Console.WriteLine(item.myname+" "+item.mysex);
}
Console.ReadLine();
}
linq中的first和FirstOrDefault()
对于数据源为List<int> 的数据源,有first条件没有搜索到数据,则会报错,而FirstOrDefault()会返回默认值。如下代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 List<int> intL = new List<int>();
2 intL.Add(1);
3 intL.Add(2);
4 intL.Add(3);
5 var i2 = intL.FirstOrDefault(n=>n>10);
6 var i1 = intL.First(n=>n>10);//报错
2 intL.Add(1);
3 intL.Add(2);
4 intL.Add(3);
5 var i2 = intL.FirstOrDefault(n=>n>10);
6 var i1 = intL.First(n=>n>10);//报错
但是当数据源是自定义的对象时,FirstOrDefault若查找不到指定的条件,就返回null,而不是默认值。如下代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
List<Person> personL = new List<Person>();
personL.Add(new Person("wtq", "男", "13616009873", 23));
personL.Add(new Person("wta", "女", "13616009871", 24));
personL.Add(new Person("wtb", "男", "13616009872", 26));
personL.Add(new Person("wtc", "男", "13616009873", 25));
personL.Add(new Person("wtd", "男", "13616009874", 27));
personL.Add(new Person("wte", "女", "13616009875", 28));
personL.Add(new Person("wtf", "男", "13616009876", 29));
personL.Add(new Person("wtg", "男", "13616009877", 30));
personL.Add(new Person("wth", "女", "13616009878", 23));
var pn = personL.FirstOrDefault(c=>c.Age>100);
Console.WriteLine("使用了FirstOrDefault:name:{0},age:{1}",pn.Name,pn.Age);
foreach (var item in pr)
{
Console.WriteLine(item.Name+" "+item.Age);
}
personL.Add(new Person("wtq", "男", "13616009873", 23));
personL.Add(new Person("wta", "女", "13616009871", 24));
personL.Add(new Person("wtb", "男", "13616009872", 26));
personL.Add(new Person("wtc", "男", "13616009873", 25));
personL.Add(new Person("wtd", "男", "13616009874", 27));
personL.Add(new Person("wte", "女", "13616009875", 28));
personL.Add(new Person("wtf", "男", "13616009876", 29));
personL.Add(new Person("wtg", "男", "13616009877", 30));
personL.Add(new Person("wth", "女", "13616009878", 23));
var pn = personL.FirstOrDefault(c=>c.Age>100);
Console.WriteLine("使用了FirstOrDefault:name:{0},age:{1}",pn.Name,pn.Age);
foreach (var item in pr)
{
Console.WriteLine(item.Name+" "+item.Age);
}
解决办法:?
综上考虑,以后尽量使用FirstOrDefault()这个函数。