当前位置:  开发笔记 > 编程语言 > 正文

基于Combobox值构建动态LINQ查询

如何解决《基于Combobox值构建动态LINQ查询》经验,为你挑选了1个好方法。



1> Bryan Watts..:

假设:

public class Person
{
    public string LastName { get; set; }
}

IQueryable collection;

您的查询:

var query =
    from p in collection
    where p.LastName == textBox.Text
    select p;

意思是:

var query = collection.Where(p => p.LastName == textBox.Text);

编译器从扩展方法转换为:

var query = Queryable.Where(collection, p => p.LastName == textBox.Text);

第二个参数Queryable.WhereExpression>.编译器理解Expression<>类型并生成代码以构建表示lambda 的表达式树:

using System.Linq.Expressions;

var query = Queryable.Where(
    collection,
    Expression.Lambda>(
        Expression.Equal(
            Expression.MakeMemberAccess(
                Expression.Parameter(typeof(Person), "p"),
                typeof(Person).GetProperty("LastName")),
            Expression.MakeMemberAccess(
                Expression.Constant(textBox),
                typeof(TextBox).GetProperty("Text"))),
        Expression.Parameter(typeof(Person), "p"));

这就是查询语法的含义.

您可以自己调用这些方法.要更改比较属性,请替换为:

typeof(Person).GetProperty("LastName")

有:

typeof(Person).GetProperty(dropDown.SelectedValue);

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有