如何从LinqDataSource获取值?

时间:2013-11-06 16:39:55

标签: asp.net linq-to-sql linqdatasource

我有一个带有几个LinqDataSources的.aspx页面。 LinqDataSource基于页面上的其他控件绑定到GridView和/或WebDataGrid。网格也可能被过滤,这可能会显示较少的结果。

数据源全部动态绑定到网格(一次只能绑定一个)。它们依赖于不同的上下文和表格。但是,所有数据源都有一列电子邮件地址。我想从网格中检索电子邮件地址,而不管LinqDataSource。

我绝对输了。我已经尝试将LinqDS转换为各种数据视图,数据表,列表,数组,字符串。这会导致错误和null对象。我仍然试图用反射来解决问题,但这真的有必要吗?我已经尝试过使用LinqDS e.Result事件中的Selected/Selecting,但最终却只得到一个没有方法的DynamicClass1对象。

我想避免为每个LinqDataSource进行特定查询(手动)。我宁愿将当前绑定的LinqDataSource转换为可用的东西(表,数组,字符串列表,任何东西),以便我可以访问“电子邮件”列中的值(甚至是第一列,假设“电子邮件” “始终是第一栏。”

我有什么选择?我错了吗?我还在学习Linq-to-SQL,这只是一个小项目,因此可以选择迁移到Entity Framework或其他东西。

我想要做的就是访问每个LinqDataSource中存在的这些电子邮件地址!我正在使用VS2013和ASP.NET 4.0。

1 个答案:

答案 0 :(得分:1)

可能有更好的方法,但您可以在数据源的“selected”事件中使用反射。这假设电子邮件地址列名为“emailAddress”。

protected void LinqDataSource1_Selected(object sender, System.Web.UI.WebControls.LinqDataSourceStatusEventArgs e)
{
    var results = (IEnumerable<object>) e.Result;
    var emailList = results.Select(ex => ex.GetType().GetProperty("emailAddress").GetValue(ex, null)).ToList();
}