linq在EF框架下,动态字段与值查询的方法

// <summary>

        /// 根据不同的字段和值查找是否存在该信息
        /// </summary>
        /// <param name="field">数据表的字段</param>
        /// <param name="value">字段的值</param>
        /// <returns></returns>
        public bool ApplyIsExit(string field, string value)
        {
            try
            {
                using (ChannelDBEntities entities = new ChannelDBEntities())
                {
                    //创建一个来源于那个EF表的参数,并命表格的名字
                    var parameter = Expression.Parameter(typeof(ChannelApplyInfo), "ChannelApplyInfo");
                    //通过上述的参访问变量值对应的字段
                    MemberExpression memberDynamic = Expression.PropertyOrField(parameter, field);
                    //把值转为常量表达式
                    ConstantExpression constantDynamic = Expression.Constant(value);
                    //生成一段二元表达式
                    var query = Expression.Equal(memberDynamic, constantDynamic);
                    //通过上述的参访问变量值对应的字段
                    MemberExpression memberIsDel = Expression.PropertyOrField(parameter, "IsDel");
                    //通过上述的参访问变量值对应的字段
                    ConstantExpression constantIsDel = Expression.Constant(false);
                    //在二元表达式上并列加载一段二元表达式
                    query = Expression.And(query, Expression.Equal(memberIsDel, constantIsDel));
                    //生成lambda表达式
                    var lambda = Expression.Lambda<Func<ChannelApplyInfo, Boolean>>(query, parameter);
                    //查找
                    var newChannel = entities.ChannelApplyInfo.FirstOrDefault(lambda.Compile());
                    return newChannel != null;
                }
 
            }
            catch (Exception ex)
            {
                Log4netHelper.Error(ex.Message, ex);
                return false;
            }           
        }

 

posted @ 2017-09-07 10:11  lzmaiyy  阅读(449)  评论(0)    收藏  举报