SQO (标准查询运算符)方法 & Linq To Object

#region SQO (标准查询运算符) 方法
#region Where() Find() FindAll() FirstOrDefault()等方法
static void c01where()
{
var list = GetPigList();
//1.0 获取当前list集合中的符合条件的第一条数据
list.Sort((p, n) => p.Age - n.Age);
var pig = list.FirstOrDefault(p => p.Age > 2);
// pig.Say();

//2.0 first 获取当前list集合中的符合条件的第一条数据,如果没有找到则抛出异常
var pig1 = list.First();

//3.0 FindAll() 找到所有符合条件的数据,并全部返回
var newlist1 = list.FindAll(p => p.Age > 3);

//4.0 Find() 找到所有符合条件的数据,并返回第一条数据
var pig2 = list.Find(c => c.Id > 0);
//pig2.Say();

//5.0 Where() 
//链式编程,从list集合中获取id==2的数据集合,通过foreach遍历新的数据集合,将数据打印出来
var pig3 = list.FindAll(p => p.Id == 2).FirstOrDefault();

//和sql很像
//select * from list where age>2 and name like '%猪%'
//list.Where(p => p.Age > 2 && p.Name.Contains("猪")).ToList().ForEach(c => c.Say());

//lambda表达式的多条件或组合
list.Where(c => c.Id == 1 || c.Id == 2).ToList().ForEach(c => c.Say());
} 
#endregion

#region SQO 方法之 排序方法 OrderBy(), OrderByDescending()的使用
static void c01OrderBy()
{
var list = GetPigList();
//1.0 对list集合进行id的正序排列
list.OrderBy(c => c.Id).ToList().ForEach(c => c.Say());

//2.0 对list集合进行id的倒序排列
list.OrderByDescending(c => c.Id).ToList().ForEach(c => c.Say());

} 
#endregion

#region 链式编程
static void c01LinkCode()
{
var list = GetPigList();
list.Where(c => c.Id > 2).Where(c => c.Age > 10).OrderBy(c => c.Age).ToList().ForEach(c => Console.WriteLine(c.ToString()));
} 
#endregion

#region 多条件排序 ThenByDescending() ,ThenBy() 
static void c01ThenBy()
{
var pigList = GetPigList();
//多条件排序:
//第一个排序条件可以使用OrderBy(),OrderByDescending()
//但是第二和以后的其他排序条件则必须使用ThenByDescending() ,ThenBy() 进行排序
// 语法和sql很像
pigList.OrderBy(c => c.TypeId).ThenByDescending(c => c.Id).ToList().ForEach(c => c.Say());
}

#endregion

#region Any() Count() 的用法
static void c01Other()
{
var list = GetPigList();
Console.WriteLine(list.Any(c => c.Age > 12)); //true
Console.WriteLine(list.Any(c => c.Id < 0)); //false

Console.WriteLine(list.Count(c => c.Id < 0));//0
Console.WriteLine(list.Count(c => c.Age > 0));//3
} 
#endregion

#region Select() 投影方法的演示,作用:将一个集合投影到另外一个集合(重点)
static void c01Select()
{
//获取list集合中的id和name 作为一个新的集合返回
var list = GetPigList();
//利用Select() 将list集合中的id name 属性的值投影成匿名类返回
var newlist = list.Select(c => new { c.Id, c.Name }).ToList();
newlist.ForEach(c => Console.WriteLine(c.ToString()));
} 
#endregion

#region 利用Skip().Take()方法实现分页查询(重点)
static void c01GetListByPage()
{
int tcount = 0;
GetListByPage(3, 2, out tcount);
}

static List<Pig> GetListByPage(int pageIndex, int pageSize, out int totalcount)
{
List<Pig> list = GetPigList();
//从集合中分页获取的数据
int skipCount = (pageIndex - 1) * pageSize;
totalcount = list.Count();
//Skip:从集合中跳过指定的行数,Take:从跳过的指定行数下一行开始取指定的数据行数
return list.Skip(skipCount).Take(pageSize).ToList();
} 
#endregion

#region join() 两个集合连接查询,模拟实现sql中的inner join(交叉连接)
static void c01Join()
{
var piglist = GetPigList();
var typelist = GetTypeList();

//1.0 利用join方法将两个集合联合查询,最终得到piglist中的Id,name,同时获取typelist中的typename
//sql 语句:select c.Id,c.Name,t,TypeName from piglist c inner join typelist t on (c.TypeId=t.TypeId)
var newlist = piglist.Join(typelist, c => c.TypeId, t => t.TypeId, (c, t) => new { c.Id, c.Name, t.TypeName }).ToList();
newlist.ForEach(c => Console.WriteLine(c.ToString()));
} 
#endregion

#region GroupBy() 分组查询
static void c01GroupBy()
{
var list = GetPigList();
//1.0 调用GroupBy() 扩展方法 进行typeId的分组操作
//select TypeID from list group by TypeId
var groupList = list.GroupBy(c => c.TypeId).ToList();
groupList.ForEach(c =>
{
Console.WriteLine("分组号:" + c.Key + "------");
c.ToList().ForEach(d => d.Say());
});
} 
#endregion

#endregion

 2.0 Linq To Object

#region 10.0 Linq to object (linq to sql, linq to xml)

        #region linq Where 的写法
        static void c01LinqWhere()
        {
            var list = GetPigList();
            //SQO写法
            var newlist = list.Where(c => c.Age == 12 && c.Name.Contains(""));
            //linq的写法
            //sql 语句:select c.Id,c.Name from list c where c.Age==12 and c.Name like '%猪%'
            var newlist2 = (from c in list
                            where c.Age == 12 && c.Name.Contains("")
                            select new { c.Id, c.Name }).ToList();

            //  newlist2.ForEach(c => Console.WriteLine(c.ToString()));

            var newlist3 = (from c in list
                            where c.Name.Contains("") && c.Id > 3
                            select new { c.Id, c.Name }).ToList();
            newlist3.ForEach(c => Console.WriteLine(c.ToString()));

        } 
        #endregion

        #region join() 的linq写法
        static void c01linqJoin()
        {
            var pigList = GetPigList();
            var typeList = GetTypeList();

            //linq的联表查询
            (from c in pigList
             join t in typeList
                 on c.TypeId equals t.TypeId
             select new { c.Id, c.Name, t.TypeName }).ToList().ForEach(c => Console.WriteLine(c.ToString()));
        } 
        #endregion

        #region GroupBy 的linq写法
        static void c01LinqGroupBy()
        {
            var list = GetPigList();
            (from c in list
             group c by c.TypeId).ToList().ForEach(c =>
                 {
                     Console.WriteLine("---------分组号:" + c.Key + "---------");
                     c.ToList().ForEach(d => d.Say());
                 });
        }
        
        #endregion

        #region Linq的排序写法
        static void c01Sort()
        {
            var list = GetPigList();

            (from c in list
             orderby c.Id descending
             orderby c.Age descending
             select c).ToList().ForEach(c => Console.WriteLine(c.ToString()));
        } 
        #endregion
        #endregion

3.0 系统内置委托

#region 系统内置委托 & lambda表达式
        #region 系统内置委托之 Predicate,接收一个泛型参数,返回一个bool值
        /// <summary>
        /// 系统内置委托之 Predicate,接收一个泛型参数,返回一个bool值
        /// </summary>
        static void C08Predicate()
        {
            List<Pig> list = GetPigList();
            // 1.0.0查询当前年龄大于四岁的对象以新集合的形式返回
            var newlist = list.FindAll(query);

            // 1.0.1 利用匿名委托来代替自定义方法query
            var newlist2 = list.FindAll(delegate(Pig pig) { return pig.Age > 4; });

            //1.0.2 利用lambda表达式代替匿名委托 goes to
            var newlist3 = list.FindAll(c => c.Age > 4);
        }
        #endregion

        #region 系统内置委托之 Action ,接受一个泛型参数,无返回值
        /// <summary>
        /// 系统内置委托之 Action ,接受一个泛型参数,无返回值
        /// </summary>
        static void c08Action()
        {
            var list = GetPigList();
            list.ForEach(c => c.Say());
        }
        #endregion

        #region Comparison接收两个相同类型的参数,返回一个整数
        /// <summary>
        /// Comparison接收两个相同类型的参数,返回一个整数
        /// </summary>
        static void c08Comparison()
        {
            var list = GetPigList();
            //1.0 对list进行排序
            list.Sort((pre, next) => next.Id - pre.Id);

            //2.0 遍历输出
            list.ForEach(c =>
                c.Say());
        }
        #endregion

        #region 系统内置委托Func()
        /// <summary>
        /// 系统内置委托Func()
        /// </summary>
        static void c08Func()
        {
            var list = GetPigList();
            //利用func<T,Result>进行集合数据筛选操作
            var newlist = list.Where(c => c.Age > 4).ToList();
            newlist.ForEach(c => c.Say());
        }
        #endregion 
        #endregion
原文地址:https://www.cnblogs.com/miaoying/p/5444323.html