IEnumerable <SetMaterialTable> query = prjEntity.MainData.SMTable.Where(u => u.字段 == 筛选值) 
代码如上所示,现在我需要用一个字段变量来动态改变筛选字段

解决方案 »

  1.   

    微软提供了动态查询库的源码:System.Linq.Dynamic,以及使用的示例代码。
    LZ下载下来看看。
      

  2.   

    但是你得保证这个变量是你prjEntity.MainData.SMTable数据集中存在的
    IQeryable<SetMaterialTable> SetMaterials=prjEntity.MainData.SMTable;ParameterExpression param = Expression.Parameter(typeof(SetMaterialTable), "u");//u.传进来的字段=="值"
    Expression left = Expression.Property(param,
        typeof(SetMaterialTable).GetProperty("传进来的字段"));
    Expression right = Expression.Constant("值");
    Expression filter = Expression.Equal(left, right);Expression filter = Expression.Equal(left, right);Expression pred = Expression.Lambda(filter, param);//where<u=>u.传进来的字段=="值"
    Expression expr = Expression.Call(typeof(Queryable), "Where",
        new Type[] { typeof(SetMaterialTable) }, 
        Expression.Constant(SetMaterials), pred);//生成动态查询
    IQueryable<SetMaterialTable> query = prjEntity.MainData.SMTable.AsQueryable()
        .Provider.CreateQuery<SetMaterialTable>(expr);
    你试试
      

  3.   


             //word为要查询的字段
            private IEnumerable <SetMaterialTable> GetValues(string word, string value)
            {
                string str = "select * from SMTable where " + word + "='" + value + "'";
                var query = prjEntity.MainData.ExecuteQuery<SetMaterialTable>(str, "");
                return query;
            }
      

  4.   

    表名SMTable也可以作为参数传进去,然后加到查询字符串里就可以了