最近在codeplex上找到了一个功能比较全的linq to object 、linq to sql 、linq to entity新增、修改、删除功能扩展的控件——magiq。
以linq to sql 为例,
var expiredProducts = store.Query(x => x.Products.Where(y => y.ExpirationDate <= DateTime.Now )).ToList();
//store为相当于数据库一对多的父项,Products相当于子项
products.Where( x=> x.ExpirationDate <= DateTime.Now ).Set( x=> x.State, ProductState.Expired )
.Set( x => x.Category.HasExpiredProducts,x=>! x.Category.HasExpiredProducts)
.Update();
//更新操作
store.UpdateCollection( x=> x.Products.Where(y=>y.ExpirationDate <= DateTime.Now ).Set( y=> y.State, ProductState.Expired ));
//一对多时,更新多端的数据
products.Where( x=> x.ExpirationDate <= DateTime.Now ).Delete();
//删除操作
store.DeleteCollection( x=> x.Products.Where(y=>y.ExpirationDate <= DateTime.Now ));
//一对多时,删除多端的数据
baseRecordRepository.BulkInsert( products.Where( x=> x.ExpirationDate <= DateTime.Now )
.Select( new ExpirationRecord { Description = x.Name + " expired" } ));
//批量新增操作,相当于SQL语句:insert into ...select ...
要使用该控件的话,要先 using Magiq;
linq to sql 的话,还需引用MirrorMirror.dll
linq to entity的话,还需引用LinqToEdmx.Core.dll和Xml.Schema.Linq.dll
在调用上述函数前,还需调用Register来表示本次操作是linq to object 、linq to sql 、linq to entity的哪一种操作,
Magiq.MagiqConfigurator.Register(new Magiq.Providers.Sql.MagiqToSql()); //linq to sql
Magiq.MagiqConfigurator.Register(new Magiq.Providers.Objects.MagiqToObjects()); //linq to object
Magiq.MagiqConfigurator.Register(new Magiq.Providers.Entities.MagiqToEntities()); //linq to entity
下面是源码及demo