nhibernate特殊查询-->Or查询
查询咨询表如下:

第一种查询:查询author1和author2的所有数据(注:作者不确定数量)
var array = new string[] { "author1", "author2" };
entitys = entitys.Where(x => array.Contains(x.Author));
第二种查询:查询描述中包含“新闻”和“公告”的所有数据(注:类似“新闻”等关键词不确定数量)
var array = new string[] { "新闻", "公告" };
entitys = entitys.Where(Toolkit.Utility.LambdaHelper.GenerateLambda<Data.DomainModels.Actionrecord>("Content", array, "Contains"));
GenerateLambda方法代码如下:
/// <summary>
/// 动态生成Lambda
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="name">字段名称</param>
/// <param name="array">包含数据数组</param>
/// <param name="method">匹配方式</param>
/// <returns>lambda</returns>
public static Expression<Func<T, bool>> GenerateLambda<T>(string name, string[] array, string method)
{
var param = Expression.Parameter(typeof(T), "x");
var propertyName = Expression.Property(param, name);
var body = Expression.Equal(Expression.Call(propertyName, method, null, Expression.Constant(array[0])), Expression.Constant(true));
for (int n = 1; n < array.Length; n++)
{
body = Expression.OrElse(body, Expression.Call(propertyName, method, null, Expression.Constant(array[n])));
}
return Expression.Lambda<Func<T, bool>>(body, param);
}

浙公网安备 33010602011771号