List集合及增删改查

IEnumerable接口类型转换list

ToList()

遍历

public void ForEach(Action<T> action)
//遍历演示
list.ForEach(i => Console.WriteLine(i));

检索与指定谓词定义的条件匹配的所有元素

public List<T> FindAll(Predicate<T> match);

//演示
var nlistg1 = ilist.FindAll(delegate(int p) { return p > 5; });
foreach (var item in nlistg1)
{
      Console.WriteLine(item.ToString());
 }

排序-对元素本身进行排序

public void Sort(Comparison<T> comparison);

//实例
list.Sort(delegate(Pig p, Pig n) { return n.Age - p.Age; });
//lambda
list.Sort((p, n) => n.Age - p.Age);

FirstOrDefault-返回序列中满足条件的第一个元素

public static TSource FirstOrDefault<TSource>(Func<TSource, bool> predicate);
//实例
list.FirstOrDefault(c => c.Age > 5 || c.Name == "小猪");

LastOrDefault-返回序列中满足条件的最后一个元素

public static TSource LastOrDefault<TSource>(Func<TSource, bool> predicate);
//实例
list.LastOrDefault(c => c.Age > 5 || c.Name == "小猪");

Where-基于谓词筛选值序列

public static IEnumerable<TSource> Where<TSource>(Func<TSource, bool> predicate);

排序

  • 对一个集合进行单个字段的升序排列使用:OrderBy 降序:OrderByDescending
  • 对一个集合进行多个字段排列:的一个字段使用OrderBy 或OrderByDescending之一第2个字段或者以后的字段则使用ThenBy和ThenByDescending之一
  • 排序实例--Func<T,TKey> 表示TKey是从T中选择一个属性后推断出的类型
//正序排列
list.OrderBy(c => c.Age).ToList().ForEach(c => Console.WriteLine(c.ToString()));

//倒序排列
list.OrderByDescending(c => c.Age).ToList().ForEach(c => Console.WriteLine(c.ToString()));

//多字段排序--需求,先根据Age倒序后再根据id倒序
//SQO方法实现上面的需求
list.OrderByDescending(c => c.Age).ThenByDescending(c => c.ID).ToList().ForEach(c => Console.WriteLine(c.ToString()));
//需求,先根据Age郑序序后再根据id正序
list.OrderBy(c => c.Age).ThenBy(c => c.ID).ToList().ForEach(c => Console.WriteLine(c.ToString()));

投影方法-select-将序列中的每个元素投影到新表单

Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector);

//需求:将list集合中的Name属性的值获取成一个新的集合
List<string> nlist = list.Select(c => c.Name).ToList();

//将list集合中的 Name和Age属性获取成一个新的对象的集合
//匿名类实现方法
var rlist1 = list.Select(c => new { Name = c.Name,Age= c.Age }).ToList();

//简写
var rlist1 = list.Select(c => new {c.Name, c.Age }).ToList();

Count-计算集合的条数,可以以条件过滤

public static int Count<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

//给rowcount赋予满足条件的数据总行数
rowcount=list.Count(c=>c.Age>5);

分页方法

  • Skip(skipNum):表示跳过集合中的前面多少行
  • Take(页容量)
public static IEnumerable<TSource> Skip<TSource>(this IEnumerable<TSource> source, int count);
public static IEnumerable<TSource> Take<TSource>(this IEnumerable<TSource> source, int count);

staticList<Pig>C0905ByPage(int pageindex,int pagesize,out int rowcount)
{
  rowcount=0;
  var list=GetPigList();
  //需求:获取第1页的数据,页容量为2
  int skipCount=(pageindex-1)*pagesize;//动态计算出要跳过的数据行数

  //给rowcount赋予满足条件的数据总行数
  rowcount=list.Count(c=>c.Age>5);

  return list.Where(c=>c.Age>5000).Skip(skipCount).Take(pagesize).ToList();
}

Join-连表查询

////SQL: select p.Name,p.ID,t.TName from piglist p join typelist t on (p.TypeID=t.TypeID)
list集合1.Join(集合2,要比较的集合1的某字段,要比较的集合2的某字段,输出的字段(匿名类)).ToList();
//演示
var nlist = piglist.Join(typelist, p => p.TypeID, t => t.TypeID, (p, t) => new { p.Name, p.ID, t.TName }).ToList();

分组-GroupBy()

public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);
//注意:分组后是一个类似字典的集合,前面是int类型的key,value则是一个小集合

//SQL: select TypeID,count(1) from list groupby Typeid
//以TypeID进行分组
list.GroupBy(c=>c.TypeID).ToList().ForEach(c=>
{
  //c:代表的是分组以后的每个小分组
  Console.WriteLine("----分组号"+c.Key);
  //g:代表的每个小分组c中的pig对象
  c.ToList().ForEach(g=>Console.WriteLine(g.ToString()));
});

Any()检查list集合,只要有一条数据则返回true

Any()

返回非重复数值的集合,去重复

list = list.Distinct().ToList();
THE END
分享
二维码
< <上一篇
下一篇>>