基本查询

 

复杂查询示例

/// <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. Hadoop安全(1)——————美团Hadoop安全实践

    http://tech.meituan.com/hadoop-security-practice.html 前言 在2014年初,我们将线上使用的 Hadoop 1.0 集群切换到 Hadoop 2. ...

  2. 深入浅出AQS之条件队列

    相比于独占锁跟共享锁,AbstractQueuedSynchronizer中的条件队列可能被关注的并不是很多,但它在阻塞队列的实现里起着至关重要的作用,同时如果想全面了解AQS,条件队列也是必须要学习 ...

  3. 记2017问鼎杯预赛的wp---来自一个小菜鸡的感想

    这次准备写一下几个misc和密码题目..很坑. 打了一整天的比赛,越来越觉得自己很菜了. 有一道题目叫做"真真假假",这道题目只有一个提示--Xor.第一眼知道是异或,也就知道这一 ...

  4. 使用JS动态修改网页body的背景色

    大部分网页默认的背景色为白色,个人感觉比较刺眼,于是写了个JS的脚本去改变body部分的背景色,代码如下: // ==UserScript== // @name ChangeBackgroundCol ...

  5. php用PHPWord库生成word文档的例子

    <?php require_once '../libs/PHPWord/PHPWord/IOFactory.php'; require_once '../../config.php'; $PHP ...

  6. jvm系列(十):如何优化Java GC「译」

    本文由CrowHawk翻译,是Java GC调优的经典佳作. 本文翻译自Sangmin Lee发表在Cubrid上的"Become a Java GC Expert"系列文章的第三 ...

  7. 执行manage.py syncdb提示Unknown command: 'syncdb'

    1. 实验环境 ubuntu14.4 + django1.9.7 2. 问题描述 在配置完数据库mysite/settings.py后,通常需要运行 python manage.py syncdb 为 ...

  8. 深圳--博雅互动 Android面试打酱油归来

    公司在TCL工业园E4,坐地到西丽站,那边在修路,不好走.B796公交站台在A出口的反方向,还要顺着施工的屏障打个弯,在西丽法院1上车.公司那边比较偏了,附近只有两趟公交.办公地点在10楼,出电梯就可 ...

  9. Nginx防盗链的3种方法

    一:一般的防盗链如下: location ~* \.(gif|jpg|png|swf|flv)$ { valid_referers none blocked www.jzxue.com jzxue.c ...

  10. [Java第一个游戏]JFrame文本框下贪吃蛇

    刚刚接触java的文本框绘图的知识点,然后就可以按照老师的提醒做一些简单的游戏,对JFrame加深一下,下面就贪吃蛇给出一些源代码,其实正真的实现的代码并不多,只是稍微处理一下就可以明白,下面代码均有 ...