• DMSLinq表达式框架实现(总)


    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")));
  • 相关阅读:
    CentOS7突然出现无法连接网络的情况--VM下
    设置Linux系统的LANG变量
    习题
    Linux目录路径知识
    Linux目录详细介绍
    regexp正则
    https://github.com/rwson/awesome-javascript-cn
    JavaScript资源大全中文版(Awesome最新版)
    关于 Chrome DevTools 的 25 个实用技巧
    从前端菜鸟到大神,看这一篇就够了
  • 原文地址:https://www.cnblogs.com/kingkoo/p/DMSLinqAll.html
Copyright © 2020-2023  润新知