基本查询

 

复杂查询示例

/// <summary>
/// 获取自定义表单数据中属于部门的部分
/// </summary>
/// <param name="month"></param>
/// <param name="departmentId"></param>
/// <param name="positionId"></param>
/// <param name="fillUserName"></param>
/// <param name="departmentName"></param>
/// <param name="formName"></param>
/// <param name="fieldName"></param>
/// <param name="assesserName"></param>
/// <returns></returns>
public IList<CustomFormResultItem> GetDepartmentCustomFormItems(DateTime month, Guid? customFormId, Guid? departmentId, string fillUserName = "", string departmentName = "", string formName = "", string fieldName = "", string assesserName = "")
{
return GetCustomFormItemInternal(2, month, customFormId, departmentId, null, fillUserName, departmentName, formName, fieldName, assesserName);
} public IList<CustomFormResultItem> GetCustomFormItemInternal(int? userorDeptControlType, DateTime month, Guid? customFormId, Guid? departmentId, Guid? positionId,
string fillUserName = "", string belongToUserOrDepartmentName = "", string formName = "", string fieldName = "", string assesserName = "")
{
var query = _customFormResultItemRep.CreateCriteriaQuery()
.CreateAlias("t.Result", "result") .CreateAlias("result.CreateUser", "createUser")
.CreateAlias("t.FormItem", "formItem")
.CreateAlias("result.CustomForm", "customForm"); if (month == DateTime.MinValue)
month = DateTime.Now; //Filter by month
query.Add(Restrictions.Eq(Projections.SqlFunction(new SQLFunctionTemplate(NHibernateUtil.Int16, "datediff(month,?1,?2)"),
NHibernateUtil.Int16, Projections.Property("CreateDate"), Projections.Constant(month)), 0)); if (userorDeptControlType.HasValue)
{
if (userorDeptControlType == (int)FormControl.姓名)
{
query.CreateAlias("result.BelongUser", "belongUser");
if (departmentId.HasValue && departmentId != Guid.Empty)
{
query.Add(Restrictions.Eq("belongUser.Department.Id", departmentId));
}
if (positionId.HasValue && positionId != Guid.Empty)
{
query.Add(Restrictions.Eq("belongUser.Position.Id", positionId));
}
if (!string.IsNullOrWhiteSpace(belongToUserOrDepartmentName))
{
query.Add(Restrictions.Like("belongUser.Name", belongToUserOrDepartmentName, MatchMode.Anywhere));
}
}
else if (userorDeptControlType == (int)FormControl.部门)
{
query.CreateAlias("result.BelongDepartment", "belongDepartment"); if (departmentId.HasValue && departmentId != Guid.Empty)
{
query.Add(Restrictions.Eq("belongDepartment.Id", departmentId));
}
//if (positionId.HasValue && positionId != Guid.Empty)
//{
// query.Add(Restrictions.Eq("belongUser.Position.Id", positionId));
//}
if (!string.IsNullOrWhiteSpace(belongToUserOrDepartmentName))
{
query.Add(Restrictions.Like("belongDepartment.Name", belongToUserOrDepartmentName, MatchMode.Anywhere));
}
} var customFormSubQuery = DetachedCriteria.For<CustomFormItem>("cfi")
.CreateAlias("CustomForm", "cf")
.Add(Restrictions.Eq("cfi.FieldType", (FormControl)userorDeptControlType))
.SetResultTransformer(Transformers.DistinctRootEntity)
.SetProjection(Projections.Property("cf.Id")); query.Add(Subqueries.PropertyIn("customForm.Id", customFormSubQuery)); if (userorDeptControlType == (int)FormControl.姓名)
{
query.AddOrder(new Order("belongUser.Name", true));
}
else
{
query.AddOrder(new Order("belongDepartment.Name", true));
}
} if (!string.IsNullOrWhiteSpace(fillUserName))
{
query.Add(Restrictions.Like("createUser.Name", fillUserName, MatchMode.Anywhere));
}
if (!string.IsNullOrWhiteSpace(formName))
{
query.Add(Restrictions.Like("customForm.Name", formName, MatchMode.Anywhere));
}
if (customFormId != null && customFormId != Guid.Empty)
{
query.Add(Restrictions.Eq("customForm.Id", customFormId));
} if (!string.IsNullOrWhiteSpace(fieldName))
{
query.Add(Restrictions.Like("t.FieldName", fieldName, MatchMode.Anywhere));
}
if (!string.IsNullOrEmpty(assesserName))
{
query.Add(Restrictions.Like("createUser.Name", assesserName, MatchMode.Anywhere));
} var types = new List<FormControl>() { FormControl.单选, FormControl.多选, FormControl.引用部门, FormControl.指标标准, FormControl.数字框, FormControl.文本框, FormControl.日期, FormControl.段落 }.ToArray();
if (types.Length > 0)
query.Add(Restrictions.In("formItem.FieldType", types)); query.AddOrder(new Order("result.Id", true));
query.AddOrder(new Order("formItem.OrderByIndex", true)); query.SetMaxResults(100); var resultList = query.List<CustomFormResultItem>();
return resultList;
}

 

数据库函数查询示例

public IList<DepartmentIndicatorResult> SearchDepartmentIndicatorResult(DateTime evaluateMonth, Guid? departmentId, string indicatorName, string departmentName)
{
var query = this._departmentIndicatorResultRep.CreateCriteriaQuery().CreateAlias("t.Department", "dept").CreateAlias("t.Indicator", "indicator"); if (evaluateMonth == DateTime.MinValue)
evaluateMonth = DateTime.Now;
//Filter by month
query.Add(Restrictions.Eq(Projections.SqlFunction(new SQLFunctionTemplate(NHibernateUtil.Int16, "datediff(month,?1,?2)"), NHibernateUtil.Int16, Projections.Property("PointDate"), Projections.Constant(evaluateMonth)), 0));
//filter by day
//query.Add(Restrictions.Eq(Projections.SqlFunction(new SQLFunctionTemplate(NHibernateUtil.Int16, "datediff(day,?1,?2)"), NHibernateUtil.Int16, Projections.Property("PointDate"), Projections.Constant(evaluateMonth)), 0)); if (departmentId.HasValue && departmentId != Guid.Empty)
{
query.Add(Restrictions.Eq("user.Department.Id", departmentId));
} if (!string.IsNullOrWhiteSpace(departmentName))
{
query.Add(Restrictions.Like("dept.Name", departmentName, MatchMode.Anywhere));
}
if (!string.IsNullOrWhiteSpace(indicatorName))
{
query.Add(Restrictions.Like("indicator.Name", indicatorName, MatchMode.Anywhere));
}
//query.Add(Restrictions.Eq("indicator.DataCollectorType", DataCollectorType.月底收集)); query.SetMaxResults(100);
//query.AddOrder(new Order("pos.Name", true)); var resultList = query.List<DepartmentIndicatorResult>();
return resultList;
}

查询示例展示

/// <summary>
/// 查询员工指标考核结果(日评,月底指标考核成绩)
/// </summary>
/// <param name="dateRangeType"></param>
/// <param name="date"></param>
/// <param name="departmentId"></param>
/// <param name="positionId"></param>
/// <param name="indicatorName"></param>
/// <param name="userName"></param>
/// <param name="dataCollectorTypes"></param>
/// <returns></returns>
private IList<UserIndicatorResult> SearchUserIndicatorResult(DateRangeType dateRangeType, DateTime date, Guid? departmentId = null, Guid? positionId = null, string indicatorName = null,
string userName = null, IList<DataCollectorType> dataCollectorTypes = null, IList<DataInputType> dataInputTypes = null, Guid? userId = null, Guid? indicatorId = null, int limit = 200, bool isAssess = true)
{
var query = this._userIndicatorResultRep.CreateCriteriaQuery().CreateAlias("t.User", "user").CreateAlias("t.Indicator", "indicator")
.Add(Restrictions.Eq("t.DateRangeType", dateRangeType)); if (date == DateTime.MinValue)
date = DateTime.Now;
if (dateRangeType == DateRangeType.Monthly || (dataCollectorTypes != null && dataCollectorTypes.Contains(DataCollectorType.月底收集)))
{
//Filter by month
query.Add(Restrictions.Eq(Projections.SqlFunction(new SQLFunctionTemplate(NHibernateUtil.Int16, "datediff(month,?1,?2)"), NHibernateUtil.Int16, Projections.Property("PointDate"), Projections.Constant(date)), 0));
}
else if (dateRangeType == DateRangeType.Daily)
{
//filter by day
query.Add(Restrictions.Eq(Projections.SqlFunction(new SQLFunctionTemplate(NHibernateUtil.Int16, "datediff(day,?1,?2)"), NHibernateUtil.Int16, Projections.Property("PointDate"), Projections.Constant(date)), 0));
} if (departmentId.HasValue && departmentId != Guid.Empty)
{
query.Add(Restrictions.Eq("user.Department.Id", departmentId));
}
if (positionId.HasValue && positionId != Guid.Empty)
{
query.Add(Restrictions.Eq("user.Position.Id", positionId));
}
if (isAssess)
{
//todo
query.Add(Restrictions.IsNotNull("TextResult"));
}
else
{
query.Add(Restrictions.IsNull("TextResult"));
}
if (!string.IsNullOrWhiteSpace(userName))
{
query.Add(Restrictions.Like("user.Name", userName, MatchMode.Anywhere));
}
if (userId.HasValue)
{
query.Add(Restrictions.Eq("user.Id", userId.Value));
}
if (indicatorId.HasValue)
{
query.Add(Restrictions.Eq("indicator.Id", indicatorId.Value));
}
if (!string.IsNullOrWhiteSpace(indicatorName))
{
query.Add(Restrictions.Like("indicator.Name", indicatorName, MatchMode.Anywhere));
} if (dataCollectorTypes != null)
query.Add(Restrictions.In("indicator.DataCollectorType", dataCollectorTypes.ToArray()));
if (dataInputTypes != null)
query.Add(Restrictions.In("indicator.DataInputType", dataInputTypes.ToArray())); //query.Add(Restrictions.Eq("indicator.DataCollectorType", DataCollectorType.月底收集)); //为了性能的考虑,每次值允许拉200条记录
query.SetMaxResults(limit);
query.AddOrder(new Order("user.Name", true)); var resultList = query.List<UserIndicatorResult>();
return resultList;
}

 

public IList<PositionIndicator> SearchPositionIndicatorList(
List<Guid> departmentIds = null, Guid? departmentId = null, string departmentName = null,
List<Guid> positionIds = null, Guid? positionId = null, string positionName = null,
List<Guid> linkedFormIds = null, Guid? linkedFormId = null,
string indicatorName = null,
EvaluateType? evaluateType = null,
string dataSource = null,
string discriminant = null,
Guid? crossAssesserId = null,
string crossAssesserName = null,
List<DataCollectorType> dataCollectorTypes = null, DataCollectorType? dataCollectorType = null,
int limit = 200)
{
var query = CreateCriteriaQuery<PositionIndicator>()
.CreateAlias("t.Position", "pos").CreateAlias("t.CrossAssesser", "ca", JoinType.LeftOuterJoin); #region Special Query
if (departmentIds != null || departmentId.HasValue)
{
if (departmentIds == null)
departmentIds = new List<Guid>();
if (departmentId.HasValue)
departmentIds.Add(departmentId.Value); var positionSubquery = DetachedCriteria.For<Department>()
.CreateAlias("Positions", "pos", NHibernate.SqlCommand.JoinType.InnerJoin)
.Add(Restrictions.In("Id", departmentIds.ToArray()))
.SetProjection(Projections.Property("pos.Id")); query.Add(Subqueries.PropertyIn("pos.Id", positionSubquery));
} if (!string.IsNullOrWhiteSpace(departmentName))
{
var positionSubquery = DetachedCriteria.For<Department>()
.CreateAlias("Positions", "pos", NHibernate.SqlCommand.JoinType.InnerJoin)
.Add(Restrictions.Like("Name", departmentName, MatchMode.Anywhere))
.SetProjection(Projections.Property("pos.Id")); query.Add(Subqueries.PropertyIn("pos.Id", positionSubquery));
} if (positionIds != null || positionId.HasValue)
{
if (positionIds == null)
positionIds = new List<Guid>();
if (positionId.HasValue)
positionIds.Add(positionId.Value);
if (positionIds.Count > 0)
query.Add(Restrictions.In("t.Position.Id", positionIds.ToArray()));
} if (!string.IsNullOrWhiteSpace(positionName))
{
query.Add(Restrictions.Like("t.Position.Name", positionName, MatchMode.Anywhere));
}
#endregion BindIndicatorQuery(query, linkedFormIds, linkedFormId, indicatorName, evaluateType, dataSource, discriminant, crossAssesserId, crossAssesserName, dataCollectorTypes, dataCollectorType, limit); return query.List<PositionIndicator>();
} public IList<DeptIndicator> SearchDepartmentIndicatorList(
List<Guid> departmentIds = null, Guid? departmentId = null, string departmentName = null,
List<Guid> linkedFormIds = null, Guid? linkedFormId = null,
string indicatorName = null,
EvaluateType? evaluateType = null,
string dataSource = null,
string discriminant = null,
Guid? crossAssesserId = null,
string crossAssesserName = null,
List<DataCollectorType> dataCollectorTypes = null, DataCollectorType? dataCollectorType = null,
int limit = 200)
{
var query = CreateCriteriaQuery<DeptIndicator>().CreateAlias("t.CrossAssesser", "ca");
if (departmentIds != null || departmentId.HasValue)
{
if (departmentIds == null)
departmentIds = new List<Guid>();
if (departmentId.HasValue)
departmentIds.Add(departmentId.Value);
if (departmentIds.Count > 0)
query.Add(Restrictions.In("t.Department.Id", departmentIds.ToArray()));
} BindIndicatorQuery(query, linkedFormIds, linkedFormId, indicatorName, evaluateType, dataSource, discriminant, crossAssesserId, crossAssesserName, dataCollectorTypes, dataCollectorType, limit); return query.List<DeptIndicator>();
} private static void BindIndicatorQuery(ICriteria query,
List<Guid> linkedFormIds = null, Guid? linkedFormId = null,
string indicatorName = null,
EvaluateType? evaluateType = null,
string dataSource = null,
string discriminant = null,
Guid? crossAssesserId = null,
string crossAssesserName = null,
List<DataCollectorType> dataCollectorTypes = null, DataCollectorType? dataCollectorType = null,
int limit = 200)
{
if (linkedFormIds != null || linkedFormId.HasValue)
{
if (linkedFormIds == null)
linkedFormIds = new List<Guid>();
if (linkedFormId.HasValue)
linkedFormIds.Add(linkedFormId.Value);
if (linkedFormIds.Count > 0)
query.Add(Restrictions.In("t.Form.Id", linkedFormIds.ToArray()));
}
if (!string.IsNullOrWhiteSpace(indicatorName))
{
query.Add(Restrictions.Like("t.Name", indicatorName, MatchMode.Anywhere));
}
if (evaluateType.HasValue)
{
query.Add(Restrictions.Eq("t.EvaluateType", evaluateType));
}
if (!string.IsNullOrWhiteSpace(dataSource))
{
query.Add(Restrictions.Like("t.DataSource", dataSource, MatchMode.Anywhere));
}
if (!string.IsNullOrWhiteSpace(discriminant))
{
query.Add(Restrictions.Like("t.Discriminant", discriminant, MatchMode.Anywhere));
}
if (!string.IsNullOrWhiteSpace(crossAssesserName))
{
query.Add(Restrictions.Like("ca.Name", crossAssesserName, MatchMode.Anywhere));
}
if (crossAssesserId.HasValue)
{
query.Add(Restrictions.Eq("t.CrossAssesser.Id", crossAssesserId));
}
if (dataCollectorTypes != null || dataCollectorType.HasValue)
{
if (dataCollectorTypes == null)
dataCollectorTypes = new List<DataCollectorType>();
if (dataCollectorType.HasValue)
dataCollectorTypes.Add(dataCollectorType.Value); if (dataCollectorTypes.Count > 0)
query.Add(Restrictions.In("t.DataCollectorType", dataCollectorTypes.ToArray()));
}
query.SetMaxResults(limit);
}

NHibernate查询示例合集的更多相关文章

  1. 天气类API调用的代码示例合集:全国天气预报、实时空气质量数据查询、PM2.5空气质量指数等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 全国天气预报:数据来自国家气象局,可根据地名.经纬度GPS.IP查 ...

  2. 位置信息类API调用的代码示例合集:中国省市区查询、经纬度地址转换、POI检索等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 中国省市区查询:2017最新中国省市区地址 经纬度地址转换:经纬度 ...

  3. 通讯服务类API调用的代码示例合集:短信服务、手机号归属地查询、电信基站查询等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 短信服务:通知类和验证码短信,全国三网合一通道,5秒内到达,费用低 ...

  4. 生活常用类API调用的代码示例合集:邮编查询、今日热门新闻查询、区号查询等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 邮编查询:通过邮编查询地名:通过地名查询邮编 今日热门新闻查询:提 ...

  5. 出行服务类API调用的代码示例合集:长途汽车查询、车型大全、火车票查询等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 长途汽车查询:全国主要城市的长途汽车时刻查询,汽车站查询 车型大全 ...

  6. 开发工具类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数 ...

  7. vue指令示例合集

    vue所有指令练习合集.这是个html文件,用chrome打开可查看结果. <!DOCTYPE html> <html lang="en" xmlns:v-on= ...

  8. FFmpeg示例程序合集-批量编译脚本

    此前做了一系列有关FFmpeg的示例程序,组成了<最简单的FFmpeg示例程序合集>,其中包含了如下项目:simplest ffmpeg player:                   ...

  9. FFmpeg示例程序合集-Git批量获取脚本

    此前做了一系列有关FFmpeg的示例程序,组成了<FFmpeg示例程序合集>,其中包含了如下项目:simplest ffmpeg player:                  最简单的 ...

随机推荐

  1. bzoj4033(树上染色)

    树上染色 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距离加上白点两两 ...

  2. 数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较

    数据库删除语句的分别介绍: Delete:用于删除表中的行(注:可以删除某一行:也可以在不删除表的情况下(即意味着表的结构.属性.索引完整)删除所有行) 语法:删除某一行:Delete From 表名 ...

  3. C++类中静态变量和静态方法使用介绍

    静态成员的提出是为了解决数据共享的问题.实现共享有许多方法,如:设置全局性的变量或对象是一种方法.但是,全局变量或对象是有局限性的.这一章里,我们主要讲述类的静态成员来实现数据的共享. 静态数据成员 ...

  4. 面试题:Two Sum

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  5. Java多线程——创建线程的两种方式

    创建线程方式一:继承Thread类. 步骤:1,定义一个类继承Thread类.2,覆盖Thread类中的run方法.3,直接创建Thread的子类对象创建线程.4,调用start方法开启线程并调用线程 ...

  6. Java继承--覆盖

    java中支持单继承.不直接支持多继承,但对C++中的多继承机制进行改良. 单继承:一个子类只能有一个直接父类. 多继承:一个子类可以有多个直接父类(java中不允许,进行改良).不直接支持,因为多个 ...

  7. canvas图表详解系列(3):动态饼状图(原生Js仿echarts饼状图)

    本章建议学习时间4小时 学习方式:详细阅读,并手动实现相关代码(如果没有canvas基础,需要先学习前面的canvas基础笔记) 学习目标:此教程将教会大家如何使用canvas绘制各种图表,详细分解步 ...

  8. 极化码之tal-vardy算法(3)

    考完驾照,回来填坑 /doge/doge 前两节分别介绍了tal算法中的合并函数和信道操作两个部分,我们将高斯信道的应用放在最后一节来介绍. 在之前的介绍中,我们一直在一个前提下进行讨论--即输入字符 ...

  9. win10 uwp 判断文件存在

    本文主要翻译http://stackoverflow.com/questions/37119464/uwp-check-if-file-exists/37152526#37152526 我们有多种方法 ...

  10. JavaScript责任链模式

    介绍 责任链模式(Chain of responsibility)是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理 ...