【问题标题】:Using Take() with bindingsource将 Take() 与绑定源一起使用
【发布时间】:2014-10-09 10:11:15
【问题描述】:

Take()如何使用下面的代码?

var context = new Entities();
BindingSource bi = new BindingSource();
var TableName = cboSelectTable.Text.ToString();    
bi.DataSource = context.GetType().GetProperty(TableName).GetValue(context, null);

谢谢。

【问题讨论】:

    标签: c# linq take


    【解决方案1】:

    您需要将GetValue() 的结果转换为适当的值。它总是会是一些 class 类型的序列吗?如果是这样,从 C# 4 和 .NET 4 开始,您可以使用泛型协方差:

    var context = new Entities();
    var tableName = cboSelectTable.Text.ToString();    
    var rawData = context.GetType().GetProperty(TableName).GetValue(context, null);
    var truncatedData = ((IQueryable<object>) rawData).Take(100);
    var source = new BindingSource { DataSource = truncatedData };
    

    您可能还想在Take(100) 之后调用ToList(),以具体化查询结果。

    (这是假设它将 成为 IQueryable&lt;T&gt;...如果它只是一个 IEnumerable&lt;T&gt;,则改为使用它。)

    尚不清楚Entities 是什么,但完全有可能有一种方法可以在不使用反射的情况下获取数据 - 如果您能提供更多信息,我们可以提供更多帮助。

    【讨论】:

    • 我实际使用的是实体框架,完整代码如下: var context = new AdminEntities(); BindingSource bi = new BindingSource(); var TableName = cboSelectTable.Text.ToString(); bi.DataSource = context.GetType().GetProperty(TableName).GetValue(context, null); dgvLoadTable.DataSource = bi; dgvLoadTable.Refresh();
    • @feather:不,不要在 cmets 中发布大量代码。但是,如果您能告诉我们 Entities() 继承自什么,那将很有帮助...
    • 使用数据库表构建的实体模型
    • @feather:这不能回答我的问题。 (我自己不是实体框架开发人员,但如果你能告诉我Entities 的基类,那真的会帮助我找到更多信息......)
    • 我有两个数据库,我使用这些数据库的表构建了实体模型。该行实际上是 var context= new AdminEntities()。这里 AdminEntities 是一个实体模型。
    猜你喜欢
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 2015-05-15
    • 2013-06-18
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    相关资源
    最近更新 更多