在lambda表达式中使用变量字段名



我试图在我的应用程序中创建一些过滤,用户将根据该单元格值单击单元格和过滤表…到目前为止我有这个

int c = this.dataGridView1.CurrentCell.ColumnIndex;
int r = this.dataGridView1.CurrentCell.RowIndex;
string s = this.dataGridView1.Rows[r].Cells[c].Value.ToString();
string n = this.dataGridView1.Columns[c].DataPropertyName.ToString();
weblogEntities dbEntities = new weblogEntities();
this.Text = dbEntities.Database.Connection.ConnectionString.ToString();
var ds = dbEntities.tbl_weblog.Where(m => n == s).ToList();
dataGridView1.DataSource = ds; 

,但我的过滤不工作,因为lambda表达式。有人能告诉我如何在我的linq中包含正确的lambda吗?

解释:我要做的是(m=>m.field_name == value),其中m.field_name应该是n,在我执行过滤器之前,我不知道那是什么,值参数是s

我认为你需要把你的代码看清楚。

这一行是什么

var ds = dbEntities.tbl_weblog.Where(m => n == s).ToList();

实际上是在做

var b = n == s;
// this line will include all if n==s otherwise include none
var ds = dbEntities.tbl_weblog.Where(m => b).ToList();

没有对lambda表达式中的m变量进行检查。

我恐怕没有足够的信息给你更多的提示。你可能想要考虑将变量命名为更易于人类阅读(例如columnIndex而不是c)

尝试使用这个::

var ds = dbEntities.tbl_weblog.Where(m => n == s).ToList();
dataGridView1.DataSource = ds; 

你可以使用Dynamic Linq:

var ds = dbEntities.tbl_weblog.Where(String.Format("{0} = {1}", n, s)).ToList();
另一种方法是构建查询表达式。下面是一个扩展方法,该方法构建了一个谓词表达式,用于根据属性的某些值按名称过滤源:
public static IQueryable<T> Where<T>(this IQueryable<T> source, 
   string propertyName, object value)
{
    var parameter = Expression.Parameter(typeof(T), "t");
    var property = Expression.PropertyOrField(parameter, propertyName);
    var body = Expression.Equal(property, Expression.Constant(value));
    var expr = Expression.Lambda<Func<T, bool>>(body, parameter);
    return source.Where(expr);
}

你可以这样使用:

var ds = dbEntities.tbl_weblog.Where(n, s).ToList();

注意:在这种情况下,不要将value转换为字符串。如果你有整数值,那么你应该把它作为整数值传递。

相关内容

  • 没有找到相关文章

最新更新