【C#泛型集合常用方法】如list.FirstOrDefault()、list.Where(n=>n.Id==xx).ToList()等

先定义两个list:

//定义个实体类ModelDemo
{
    public int Id {get ;set; }
    public string Name {get; set; }
}
//定义int类型集合intList和ModelDemo类型集合modelList
List<int> intList = new List<int>();
List<ModelDemo> modelList = new List<ModelDemo>();

1. Add(),AddRange()

intList.Add(1);     //向集合中添加一个元素1
modelList.Add(new ModelDemo {Id = 1,Name="添加"});    //向modelList添加一个对象元素
//AddRange()顾名思义范围添加、批量添加
var tempList = new List<ModelDemo>{ new ModelDemo{Id=2,Name="哈哈"},new ModelDemo{Id=3,Name="嘿嘿"}};
modelList.AddRange(tempList);    //将集合tempList添加到modelList中

2. Insert(), InsertRange()

intList.Insert(0,3);    //在索引为0处插入一个元素3

modelList.InsertRange(1,tempList);    //在索引1处插入集合tempList

3. Remove(),RemoveAt() , RemoveRange(), RemoveAll()

intList.Remove(3);    //移除元素3
intList.RemoveAt(1);    //移除索引(下标)为1的元素
modelList.RemoveRange(1,3);    //从索引1开始移除3个元素,包括索引1本身元素
modelList.RemoveAll(m=> m.Id>=1);    //删除modelList中所有Id属性大于等于1的元素

4. Clear()

modelList.Clear();    //清空所有元素

5. Contains(), Any() 判断是否存在,bool类型

if(intList.Contains(3)){  ...  }

if(modelList.Any(m=> m.Id==1))    //判断集合中是否存在属性Id=1的对象元素
{
    ...
}

6,First(),FirstOrDefault() 取list中的第一个\第一个满足条件的对象(从.NetFramework3.5后FirstOrDefault()的出现代替了早期Find()方法的应用,所以这里不再赘述Find()方法)

//这里顺便一提,我曾经写过这么一句代码,大概如下
var model = storeList.Where(m=> m.Flag==5).ToList().FirstOrDefault();
//我想取满足Flag属性为5的一个对象,同样是FirstOrDefault()取满足条件对象中的第一个值,从性能上来讲不如下面这种
var model = storeList.FirstOrDefault(m=> m.Flag==5);

//即list中满足条件对象中的第一个对象=> list中第一个满足条件的对象

7. 排序方法Sort()、Reverse()、OrderBy()

intList.Sort();    //默认升序
intList.Reverse();    //反转元素
modelList.OrderBy(m=>m.Id).ToList();    //根据实体类属性Id将集合排序,升序
modelList.OrderByDescending(m=> m.Id).ToList();    //降序排序

8. Join()方法,类似于sql中的join连接,有时间我再详细讲解,有兴趣的朋友可以自行了解一下,大概用法如下:

//等同于linq的from a in aList join b in bList on a.Id equas b.ClassId SELECT new B
aList.Join(bList , a => a.Id,b => b.ClassId , (a , b) => b).ToList();

未完待续...

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Restful.Data是一套通用的轻量级数据持久层组件,除封装了ADO.NET基本的数据库操作以外,也提供了一些orm相关的API,用户可以方便的定义实体类,并使用这些API对数据进行增删改查等操作。 Restful.Data借鉴了业界如nhibernate、entity framework等知名的数据持久层组件,但从一开始设计的初衷就是为了让用户能快速的学习和使用,并写出更加简洁优雅的代码,所以摒弃了一些复杂的设计和功能,用户可以使用变通的方式或方法使用Restful.Data组件实现其目的。 Restful.Data充分考虑了实体框架的执行效率问题,进行了反复的推敲和论证,尽可能的采用高效的设计方案来提高性能。谁需要Restful.Data?  敢于冒险、追求完美、勇于挑战并极具责任感的程序设计人员。Restful.Data提供哪些功能?基本的ADO.NET操作:    BeginTransaction    ExecuteScalar    ExecuteDataReader    ExecuteDataTable    ExecuteDataSet    ExecutePageQuery    ExecuteStoredProcedureORM相关操作:    Insert    Updete    Delete    Find如何使用Restful.Data?  使用前的准备:  下载Restful.dll、Restful.Data、Restful.Data.MySql、Remotion.Linq.dll、MySql.Data.dll,或者直接下载源代码进行编译并获取这5个dll,并在项目中引用这些dll。在 Web.config 或 App.config 中配置连接字符串,如下:注册提供程序工厂:  SessionFactories.Register();  提供程序工厂在一个Application中仅需注册一次。如何进行基本的数据库操作:using( ISession session = SessionFactory.CreateDefaultSession() ){     string sql = "select * from Person";     DataTable dt = session.ExecuteDataTable( sql ); }CreateDefaultSession默认情况下根据配置文件中连接字符串节点的第一项创建数据库连接,你可以调用CreateSession进行指定,或者你也可以使用 SessionFactory.Default = "MySql2"指定默认连接。未防止 SQL 注入,你也使用呆参数方法:using( ISession session = SessionFactory.CreateDefaultSession() )   {     string sql = "select * from Person where Id = @Id;"; IDictionary<string, object> parameters = new Dictionary<string, object>(); parameters.Add( "@Id", 5 ); DataTable dt = session.ExecuteDataTable( sql, parameters ); }与此类似的还有ExecuteScalar、ExecuteDataReader、ExecuteDataTable、ExecuteDataSet等方法。如何进行分页查询:using( ISession session = SessionFactory.CreateDefaultSession() )   {       string sql = "select * from User where CreateTime < @CreateTime";   IDictionary<string, object> parameters = new Dictionary<string, object>();   parameters.Add( "@CreateTime", DateTime.Now );   // 查询第2页,每页10条,并根据 CreateTime 字段降序排列   PageQueryResult result = session.ExecutePageQuery( sql01, 2, 10, "CreateTime DESC", parameters ); }如何进行数据新增:using( ISession session = SessionFactory.CreateDefaultSession() )   {     var person = new Person(); // person.Id = 1; 若Id字段为自增类型,无需指定。 person.Name = "test01"; person.CreateTime = DateTime.Now; person.IsActive = true; int i = session.Insert( person ); }如何进行数据更新:using( ISession session = SessionFactory.CreateDefaultSession() )   {     var person = new Person(); person.Id = 1;  person.Name = "test01"; person.CreateTime = DateTime.Now; person.IsActive = true; // 在调用此方法时,务必指定实例的主键值。 int i = session.Update( person ); }或者你也可以批量更新:using( ISession session = SessionFactory.CreateDefaultSession() )   {     var person = new Person(); // person.Id = 1;  person.Name = "test01"; person.CreateTime = DateTime.Now; person.IsActive = true; // 在调用此方法时,不需要指定主键值,且不会更新主键字段 session.Update<Person>().Set( person ).Where( s => s.IsActive == false ).Execute(); }如何进行数据删除:using( ISession session = SessionFactory.CreateDefaultSession() )   {     var person = new Person() { Id = 1 }; // 在调用此方法时,需要指定主键值 session.Delete( person ); }或者你也可以批量删除:using( ISession session = SessionFactory.CreateDefaultSession() )   {     // 在调用此方法时,不需要指定主键值     session.Delete().Where( s => s.IsActive == false ).Execute();   }如何进行单表查询:using( ISession session = SessionFactory.CreateDefaultSession() )   {     var queryable = session.Find()         .Where( s => s.Name.Contains("a") )         .Where( s => s.CreateTime < DateTime.Now )         .OrderBy( s => s.CreateTime )         .Skip(5)         .Take(10); var list = queryable.ToList(); var count = queryable.Count(); var first = queryable.FirstOrDefault(); var queryable1 = from s in session.Find<Person>()             where s => s.Name.Contains("a")             orderby s.CreateTime descending             select new { Id = s.Id, Name = s.Name }; // ... }目前只支持对单表的LINQ查询,且为了降低复杂度,后期也并不打算支持多表查询,对函数的支持也有限,仅支持string类型的 StartsWith、EndsWith、Contains、Equals、IsNullOrEmpty等方法,对于其他方法后期将会继续完善。如果你需要实现一个复杂的查询并将其转换成对象,你也可以这样:using( ISession session = SessionFactory.CreateDefaultSession() )   {     string sql = "..."; T @object = session.Find<T>( sql ); }如何支持事务处理:using( ISession session = SessionFactory.CreateDefaultSession() )   {     using( DbTransaction transaction = session.BeginTransaction() )     {         // ...         // ...     transaction.Commit(); } }SessionHelper的使用:SessionHelper对session对象的方法进行了静态封装,如果你只是需要执行单条语句,并马上关闭连接,你可以使用 SessionHelper 类中提供的一些辅助方法。5、如何定义实体类[Serializable] public class Person : EntityObject  // 需继承与 EntityObject 类 {     private int m_Id;     private string m_Name;     private int? m_Age;     private decimal? m_Money;     private DateTime m_CreateTime;     private bool m_IsActive;     [PrimaryKey, AutoIncrease]  // 如果是自增字段,标记为 AutoIncrease;如果是主键标记为 PrimaryKey     public int Id     {         get { return this.m_Id; }         set { this.m_Id = value; this.OnPropertyChanged( "Id", value ); }     }     public string Name     {         get { return this.m_Name; }         set { this.m_Name = value; this.OnPropertyChanged( "Name", value ); }     }     public int? Age     {         get { return this.m_Age; }         set { this.m_Age = value; this.OnPropertyChanged( "Age", value ); }     }     public decimal? Money     {         get { return this.m_Money; }         set { this.m_Money = value; this.OnPropertyChanged( "Money", value ); }     }     public DateTime CreateTime     {         get { return this.m_CreateTime; }         set { this.m_CreateTime = value; this.OnPropertyChanged( "CreateTime", value ); }     }     public bool IsActive     {         get { return this.m_IsActive; }         set { this.m_IsActive = value; this.OnPropertyChanged( "IsActive", value ); }     } }6、总结因作者时间关系,组件目前并非十分完善,测试工作也只简单的进行了一部分,但您可以完全放心的应用于商业项目中,如遇到问题,作者将尽可能的解决。 标签:Restful

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值