linq 使用first筛选出第一条数据

 

 

View Code
  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();

        }

 linq中的first和FirstOrDefault()

  对于数据源为List<int> 的数据源,有first条件没有搜索到数据,则会报错,而FirstOrDefault()会返回默认值。如下代码:

View Code
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);//报错

 

 但是当数据源是自定义的对象时,FirstOrDefault若查找不到指定的条件,就返回null,而不是默认值。如下代码:

View Code
            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);
            }

 解决办法:?

 综上考虑,以后尽量使用FirstOrDefault()这个函数。

 

posted on 2011-07-30 16:54  wtq  阅读(7845)  评论(0编辑  收藏  举报