【发布时间】:2013-02-05 20:47:43
【问题描述】:
如果我在这里遗漏了一些明显的东西,我深表歉意....
我正在尝试自定义一种方法来创建 RadComboBox 过滤器,该过滤器可根据用户类型进行调整(基于 Telerik 演示)。我正在使用业务逻辑层来拉入我的数据源,然后我尝试使用 linq 来选择组合框 OnItemsRequested 的值,具体取决于哪个组合框发出了请求。我正在尝试根据发出请求的 GridColumn 过滤器来设置“where”子句中的参数。
这是我填写列表的代码:
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();
}
【问题讨论】:
-
您真的应该只转换一次
o并在整个方法中使用输入的结果。这是一个巨大的性能损失,也是一个真正的阅读障碍。 -
....更不用说代码的可读性了:)
-
我很欣赏速度和风格点 cmets。 (我对此很陌生。)关于如何让“this.UniqueName”在 WHERE 子句中进行评估有什么想法吗?
-
GetAllEmployees返回什么类型?我假设IQueryable<Employee>但想确认一下。 -
@DStanley,它返回一个
List<EmployeeDTO>。