EF 公共查询类

因需求忒多,所以自己拼接了下备忘。

/// <summary>
    /// 公共查询类
    /// </summary>
    public static class PublicPredicateBuilder
    {
        /// <summary>
        /// 地区组合查询
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="db"></param>
        /// <returns></returns>
        public static Expression<Func<W_Brjcxx, bool>> W_BrjcxxToArea(DB.BlContext db, Expression<Func<W_Brjcxx, bool>> predicate)
        {
            if (RequestSession.GetSessionUser().UserAccount.ToString() != "admin")
            {
                string DeptNo = RequestSession.GetSessionUser().DeptNo.ToString().Replace("‘", "");
                var list_Base_Organization = db.Base_Organization.Where(d => DeptNo.Contains(d.Organization_ID)).ToList();
                foreach (var model_Base_Organization in list_Base_Organization)
                {
                    var predicate_Base_Organization = PredicateBuilder.True<W_Brjcxx>();
                    var areas = model_Base_Organization.AreaLV.Split(‘,‘).ToList();
                    var city = areas.Count >= 1 ? areas[0] : "";
                    var county = areas.Count >= 2 ? areas[1] : "";
                    var town = areas.Count >= 3 ? areas[2] : "";
                    var community = areas.Count >= 4 ? areas[3] : "";

                    int whereCount = 0;

                    if (!string.IsNullOrWhiteSpace(city) && city != "请选择")
                    {
                        predicate_Base_Organization = predicate_Base_Organization.And(d => d.AreaID.Contains(city));
                        whereCount++;
                    }
                    if (!string.IsNullOrWhiteSpace(county) && county != "请选择")
                    {
                        predicate_Base_Organization = predicate_Base_Organization.And(d => d.AreaID.Contains(county));
                        whereCount++;
                    }
                    if (!string.IsNullOrWhiteSpace(town) && county != "请选择")
                    {
                        predicate_Base_Organization = predicate_Base_Organization.And(d => d.AreaID.Contains(town));
                        whereCount++;
                    }
                    if (!string.IsNullOrWhiteSpace(community) && county != "请选择")
                    {
                        predicate_Base_Organization = predicate_Base_Organization.And(d => d.AreaID.Contains(community));
                        whereCount++;
                    }
                    if (whereCount == 0)
                    {
                        predicate_Base_Organization = predicate_Base_Organization.And(d => d.AreaID == "此人没有设置任何所属区域");
                    }

                    predicate = predicate.Or(predicate_Base_Organization);
                }

            }
            return predicate;
        }
    }

//例子

  var predicate = PredicateBuilder.True<W_Brjcxx>();
                if (!string.IsNullOrWhiteSpace(sname))
                {
                    predicate = predicate.And(d => d.XM.Contains(sname) || d.SF_number.Contains(sname));
                }
                if (!string.IsNullOrWhiteSpace(sarea))
                {
                    predicate = predicate.And(d => d.AreaID.Contains(sarea));
                }

                predicate = predicate.And(Model.PublicPredicateBuilder.W_BrjcxxToArea(db, predicate));

 var sql_W_Brjcxx = db.W_Brjcxx.Where(predicate).OrderBy(d => d.state).ThenByDescending(d => d.LR_time);
                var list_W_Brjcxx = sql_W_Brjcxx.Skip((PageControl1.PageIndex - 1) * PageControl1.PageSize).Take(PageControl1.PageSize)
                                                     .ToList();
  var predicate = PredicateBuilder.True<W_Brjcxx>();
                if (!string.IsNullOrWhiteSpace(sname))
                {
                    predicate = predicate.And(d => d.XM.Contains(sname) || d.SF_number.Contains(sname));
                }
                if (!string.IsNullOrWhiteSpace(sarea))
                {
                    predicate = predicate.And(d => d.AreaID.Contains(sarea));
                }
                //调用组合拼接
                predicate = predicate.And(Model.PublicPredicateBuilder.W_BrjcxxToArea(db, predicate));

 var sql_W_Brjcxx = db.W_Brjcxx.Where(predicate).OrderBy(d => d.state).ThenByDescending(d => d.LR_time);
                var list_W_Brjcxx = sql_W_Brjcxx.Skip((PageControl1.PageIndex - 1) * PageControl1.PageSize).Take(PageControl1.PageSize)
                                                     .ToList();

原文地址:https://www.cnblogs.com/OleRookie/p/8645725.html

时间: 2024-10-16 11:35:15

EF 公共查询类的相关文章

公共查询类criteria

package cn.edu.hbcf.common.vo; import java.math.BigDecimal; import java.sql.Timestamp; import java.util.Date; import java.util.HashMap; import java.util.Map; import cn.edu.hbcf.common.utils.TypeCaseHelper; /** * 公用条件查询类 也可以用于MVC层之间的参数传递 * * @author L

【C#公共帮助类】JsonHelper 操作帮助类, 以后再也不用满地找Json了,拿来直接用

 四个主要操作类:JsonConverter .JsonHelper .JsonSplit .AjaxResult 一.JsonConverter: 自定义查询对象转换动态类.object动态类转换json包.json转换object动态类.DataReader转换为Json.DataSet转换为Json.DataTable转成Json.Datatable转换为Json .格式化字符型日期型布尔型.过滤特殊字符等 using System; using System.Collections.Ge

Util应用程序框架公共操作类(十二):Lambda表达式公共操作类(三)

今天在开发一个简单查询时,发现我的Lambda操作类的GetValue方法无法正确获取枚举类型值,以至查询结果错误. 我增加了几个单元测试来捕获错误,代码如下. /// <summary> /// 测试值为枚举 /// </summary> [TestMethod] public void TestGetValue_Enum() { var test1 = new Test1(); test1.NullableEnumValue = LogType.Error; //属性为枚举,值

EF Dal通用类

一个通用的ef  dal处理类是非擦汗那个提高工作效率的 using System; using System.Collections.Generic; using System.Data.Entity.Infrastructure; using System.Data.Entity.Migrations; using System.Data.SqlClient; using System.Linq; using System.Linq.Expressions; using System.Ref

Util应用程序框架公共操作类(六):验证扩展

前面介绍了仓储的基本操作,下面准备开始扩展查询,在扩展查询之前,首先要增加两个公共操作类,一个是经常要用到的验证方法,另一个是Lambda表达式的操作类. 很多时候,我们会判断一个对象是否为null,由于null是一个不能接受的值,它会导致“未将对象引用设置到对象的实例”的严重错误,所以当检测到null值时一般直接抛出ArgumentNullException异常. public void Test( string name ) { if( name == null ) throw new Ar

EF select 匿名类 问题

连续两次被相同问题困扰. 一.举例 var query=db.StudentScore.Where(r=> r.SubjectId==subjectId).Select(g=>new {SubjectId=SubjectId,Score=g.Score}).ToList(); 这是一段平常的代码,但有时候他会报错:匿名类无法转换为实体类StudentScore. 1期初,我是这么想的: new StudentScore var query=db.StudentScore.Where(r=>

ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

原文:ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 使用 EF 框架查询数据 上一章节我们学习了如何设置和初始化数据库,以及如何创建迁移代码和应用迁移代码.本章节我们就学习如何使用 EF 框架来查询数据库,至于添加和修改,后面的章节中我们会慢慢学习到 添加测试数据 我们首先使用 SQLite Studio 添加三条数据 ID Name 1 李白 2 杜甫 3 白居易 使用 SQLite Studio

JDBC公共操作类

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DBUtil { public static final String DRIVER = "com.mysql.jdbc.Driver"; public static final

【C#公共帮助类】分页逻辑处理类

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Common 7 { 8 /// <summary> 9 /// 分页逻辑处理类 10 /// </summary> 11 public class PageCollection 12 { 13 /// <summary> 14 /// 总页数 15 ///