LINQ常用操作

LINQ常用操作:查询,过滤,排序,分组,连接,聚合函数,元素操作符

为了方便了解LINQ的操作,先准备一下测试数据源:

//基础类型
public class Friend
    {
        public int FId { get; set; }
        public string FriendName { get; set; }
        public int Age { get; set; }
        public string Phone { get; set; }
        public int FTypeId { get; set; }
    }

    public class FriendType
    {
        public int FTypeId { get; set; }
        public string FTypeName { get; set; }
    }

 //朋友信息
    IList<Friend> friendList = new List<Friend>() { 
                         new Friend() { FId = 1, FriendName = "小明", Age = 23 ,Phone="13800008883",FTypeId=1} ,
                         new Friend() { FId = 2, FriendName = "小华", Age = 20 ,Phone="17600008887",FTypeId=2} ,
                         new Friend() { FId = 3, FriendName = "小河", Age = 33 ,Phone="19800008889",FTypeId=1} ,
                         new Friend() { FId = 4, FriendName = "小连", Age = 26 ,Phone="18800008888",FTypeId=2} ,
                         new Friend() { FId = 5, FriendName = "小玲", Age = 22 ,Phone="14800008884",FTypeId=2} ,
                        };

 //朋友类型
    IList<FriendType> fTypeList = new List<FriendType>(){
                           new FriendType(){FTypeId=1,FTypeName="知心人"},
                           new FriendType(){FTypeId=2,FTypeName="好朋友"},
                        };

 

LINQ查询

//查询语法
var friends = from f in friendList
              select new {f.FId,f.FriendName,f.Age};

//Lamdba语法
var friends2 = friendList.Select(f => new { f.FId, f.FriendName,f.Age });

 LINQ过滤

//查询语法
var friends = from f in friendList
                    where f.Age > 20                         
                    select new {f.FId,f.FriendName,f.Age};

//Lamdba语法
var friends2 = friendList.Where(f=>f.Age>20).Select(f => new { f.FId, f.FriendName, f.Age });

LINQ排序(升序、降序)

//查询语法 升序
var friends = from f in friendList
                    orderby f.Age                        
                    select new {f.FId,f.FriendName,f.Age};
//Lamdba语法 升序
var friends2 = friendList.OrderBy(f=>f.Age).Select(f => new { f.FId, f.FriendName, f.Age });

//查询语法 降序
var friends = from f in friendList
                    orderby f.Age descending                       
                    select new {f.FId,f.FriendName,f.Age};
//Lamdba语法 降序
var friends2 = friendList.OrderByDescending(f=>f.Age).Select(f => new { f.FId, f.FriendName, f.Age });

 LINQ分组

var friends = from f in friendList
              group f by f.FTypeId; 

var friends2 = friendList.GroupBy(f => f.FTypeId);

 LINQ连接

//查询语法
var friendTypes = from f in friendList
                              join ft in fTypeList
                              on f.FTypeId equals ft.FTypeId
                              select new
                              {
                                  fName = f.FriendName,
                                  ftName = ft.FTypeName

                              };
//Lamdba语法
var friendTypes2 = friendList.Join(
                fTypeList,
                f => f.FTypeId,
                ft => ft.FTypeId,
                (f, ft) => new
                {
                    fName = f.FriendName,
                    ftName = ft.FTypeName
                });

LINQ聚合函数

//平均值
var avgAge = friendList.Average(u => u.Age);
//总数值
var userCount = friendList.Count();
//最大值
var maxAge = friendList.Max(u => u.Age);
//最小值
var minAge = friendList.Min(u => u.Age);
//总和值
var sumAge = friendList.Sum(u => u.Age);

LING元素操作符

//获取指定索引元素
Friend fri = friendList.ElementAt(0);
//获取最前一个元素
Friend friFirst = friendList.First();
Friend friFirst = friendList.FirstOrDefault();
//获取最后一个元素 
Friend frLast = friendList.Last();
Friend frLast = friendList.LastOrDefault(); 
//获取唯一元素 
Friend friSignal = friendList.Single(u => u.Age < 21);
Friend friSignal = friendList.SingleOrDefault(u => u.Age < 21);

以上元素操作符区别说明:

Frist与FristOrDefault 区别:如果源序列为空,Frist 则抛异常。FristOrDefault 如果序列中不包含任何元素,则返回默认值。

Last与LastOrDefault 区别:如果源序列为空,Last 则抛异常。LastOrDefault 如果序列中不包含任何元素,则返回默认值。

Single与SingleOrDefault 区别:Single 如果该序列并非恰好包含一个元素,则会引发异常。SingleOrDefault 如果这类元素不存在,则返回默认值;如果有多个元素满足该条件,此方法将引发异常。

posted @ 2020-07-19 16:24  阿业  阅读(283)  评论(0编辑  收藏  举报