1.写这个框架要感谢一下之前的公司,逼我深入学习LINQ的一些东西.前前后修改过两三次,该框架不和IQueryable查询相似,但不是基于IQueryable来写的,所以非常方便扩展,最终实现多表查询和支持部分linq from语法(懒加载技术,不支持into语法).

如:

            var q1 = from x in DMS.Create<SysRole>(false, false)
                     where x.SysRoleID > 0 && x.RoleName.Like("s")
                     select x;
            var q2 = from x in DMS.Create<SysRole>(false, false)
                     join y in DMS.Create<SysRolePower>()
                     on x.SysRoleID equals y.SysRoleID
                     select new
                     {
                         x.SysRoleID,
                         y.SysRolePowerID,
                         x.RoleName
                     };

 

2.支持子查询的语法(必须在子查询中对表名进行As)

            var query = DMS.Create<SysRolePower>().Where(q => q.SysRolePowerID > 0 && q.Remark.Like("qq")).Select(q => new
            {
                q.SysRolePowerID,
                RoleName = DMS.Create<SysRole>().As("x").Where(x => x.SysRoleID == q.SysRoleID && x.RoleName.Like("s"))
                .ToColumn<string>(),
            });

3.数据返回默认为DataTable类型,一般可以ToList<任意类型>(),根据类型的属性字段进行值,不像IQueryable里面的ToList不能传类型,需进行Select进行赋值.大大减少代码量
4.支持数据过滤接口,可在框架外进行实现IDMSLinqQueryFilter接口进行配置过滤表的纵向数据权限,横向数据权限可用ColumnsClip进行拼接的方式进行调整.

<configuration>
    <configSections>
        <section name="DMSLinqQueryProvider" type="KingNET.DMSFrame.DMSLinq.DMSLinqQueryProvider,KingNET.DMSFrame.DMSLinq"/>
    </configSections>
    <DMSLinqQueryProvider>
        <add key="query1" value="KingNET.DMSFrame.Business.QueryFilterBLL,KingNET.DMSFrame.Business"/>
    </DMSLinqQueryProvider>
</configuration>

5.支持字段拼接查询或做为条件

var query2 = DMS.Create<UserInfo>().Select(q => q.Columns((q.Title + q.UserName).As("UserName")));

 

 

 

 

相关文章:

  • 2021-06-21
  • 2022-12-23
  • 2021-06-22
  • 2021-06-18
  • 2022-01-29
  • 2022-12-23
  • 2021-08-20
  • 2021-10-24
猜你喜欢
  • 2021-11-12
  • 2021-08-30
  • 2021-07-08
  • 2021-11-22
  • 2021-09-08
  • 2021-06-30
  • 2021-04-22
相关资源
相似解决方案