public class LinqHelper
{
/// <summary>
/// 動的にLINQ条件を追加する
/// </summary>
/// <typeparam name="T">IQueryable</typeparam>
/// <typeparam name="C">Expression.Constant</typeparam>
/// <param name="queryable">クエリ原型</param>
/// <param name="property">プロパティ名</param>
/// <param name="constant">Value</param>
/// <returns>IQueryable</returns>
public IQueryable<T> AddParameterExpression<T, C>(IQueryable<T> queryable, string property, C constant)
{
ParameterExpression parameterExpression = Expression.Parameter(typeof(T), "param");
Expression<Func<T, bool>> ex = Expression.Lambda<Func<T, bool>>(
Expression.Equal(
Expression.Property(parameterExpression, typeof(T).GetProperty(property)),
Expression.Constant(constant, typeof(C)),
false,
typeof(T).GetMethod("op_Equality")
),
new ParameterExpression[] { parameterExpression }
);
return queryable.Where(ex);
}
}
}