计算linqwhere子句中的列名



如果我在这里遗漏了一些明显的内容,我很抱歉。。。。

我正在尝试自定义一种方法来创建一个RadComboBox过滤器,该过滤器可以根据用户的类型进行调整(基于Telerik演示)。我使用业务逻辑层来拉入我的数据源,然后我尝试使用linq来选择组合框OnItemsRequested的值,这取决于哪个组合框发出了请求。我正试图在"where"子句中设置基于哪个GridColumn过滤器发出请求的参数。

这是我填写列表的代码:

private void list_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e)
    {
        ((RadComboBox)o).DataTextField = this.DataField;
        ((RadComboBox)o).DataValueField = this.DataField;
        var employees = from emp in EmployeeBL.GetAllEmployees()
                        where emp.(this.UniqueName).Contains(e.Text)
                        select emp;
        ((RadComboBox)o).DataSource = employees;
        ((RadComboBox)o).DataBind();
    }

是否需要将UniqueName强制转换为数据对象(EmployeeDTO)中的参数?

谢谢。

更新::感谢反馈,我在填充组合框列表方面取得了一些成功。然而,我想我的linq语句中仍然有一个错误。然而,该列表是第一次构建的,当我尝试进行"StartsWith"比较时,页面会抛出一个错误,称数据源不包含数据行,尽管我肯定在键入一个"可查找"字符串。

这是我现在拥有的。

private void list_ItemsRequested(RadComboBox o, RadComboBoxItemsRequestedEventArgs e)
    {
        o.DataTextField = this.DataField;
        o.DataValueField = this.DataField;
        DataTable dt = EmployeeBL.GetAllEmployees().AsDataTable();
        IEnumerable<DataRow> query =
            from emp in dt.AsEnumerable()
            where emp.Field<String>(this.UniqueName).StartsWith(e.Text)
            select emp;
        DataTable boundTable = query.CopyToDataTable<DataRow>();
        o.DataSource = boundTable;
        o.DataBind();
    }

没有内置的方法。你有一些选择:

  • 使用类似ScottGu的动态Linq查询库
  • 使用反射根据属性名称生成表达式
  • 使用switch语句从已知的属性列表中选择表达式(易于编码,动态性较差)
  • 使用CopyToDataTable扩展方法创建一个支持通过DataView进行基于字符串的排序/筛选的数据表

您是否试图对每个员工调用this.UniqueName中命名的方法,并查看结果是否包含文本?是这样,你可以使用反射。

如果您确定oRadComboBox,那么它也可以按原样传入。

private void list_ItemsRequested(RadComboBox o, RadComboBoxItemsRequestedEventArgs e)
{
    o.DataTextField = this.DataField;
    o.DataValueField = this.DataField;
    PropertyInfo property = typeof(EmployeeDTO).GetProperty(this.UniqueName);
    var employees = from emp in EmployeeBL.GetAllEmployees()
                    where ((IQueryable<string>)(property.GetValue(emp))).Contains(e.Text)
                    select emp;
    o.DataSource = employees;
    o.DataBind();
}

相关内容

  • 没有找到相关文章

最新更新