【问题标题】:Linq operation with datatable使用数据表进行 Linq 操作
【发布时间】:2011-12-31 19:29:11
【问题描述】:

我正在使用 ADO.NET 填充一个 DataTable 并绑定一个 DataList,它可以工作。但是当我尝试使用 Linq 从 DataTable 中仅提取 10 条记录时,如下所示,我的代码给出了错误:

var xx=dt.asEnumerable().take(10).tolist();
dglist.datasource=xx;
dglist.databind();

<asp:DataList ID="dglist" runat="server" 
    RepeatColumns="4" RepeatDirection="Horizontal" 
    RepeatLayout="Table" CellPadding="1">
    <ItemTemplate>
        <div>
           <asp:Image runat="server" id="Image1" 
                 src='<%# Eval("photos") %>'  BorderWidth="0"
                 alt="" style="width:300px;height:300px;display:block;"/>
        </div>
    </ItemTemplate>
</asp:DataList>

我的数据表有一个名为“照片”的列。绑定到 DataList 时出现错误。请指导我如何使用 Linq 从 DataTable 中提取 10 条记录并将 DataList 与 10 条记录绑定。

我还有一个问题。

datatable.asEnumerable() 是什么意思,它有什么作用?似乎通过 asEnumerable() 将 DataTable 转换为什么?

【问题讨论】:

  • 关于您的最后一个问题,它将数据库转换为集合(即 IEnumerable
  • 什么是异常或您收到的消息?
  • 找不到名为“照片”的列
  • 那个代码可以吗?我使用 ado.net 而不是 linq to sql 填充我的数据表。
  • 您能否尝试删除 .tolist() 部分(var xx=dt.asEnumerable().take(10);)。过去将我的 IEnumerable 转换为 List 时,我得到了一些奇怪的结果,但无法解释原因。你也可以在执行代码的时候下一个断点,看看你的 xx var 的属性是什么,看看它是否真的不存在。

标签: c# asp.net linq datatable


【解决方案1】:

DataTable 实现了IListSource 接口,它支持数据绑定到列名(所以Eval("photos") 有效)。但是当您在DataTable 上调用AsEnumerable() 时,它将返回一个IEnumerable&lt;DataRow&gt;,其中DataRow 对象将没有名为photos 的属性,这就是您得到异常的原因。但是,如果您在 eval 中使用带有列名的索引器,则可以使其工作:

var xx = dt.AsEnumerable().Take(10).ToList();
dglist.DataSource = xx;
dglist.DataBind();

<asp:DataList ID="dglist" runat="server" 
    ...
           <asp:Image runat="server" id="Image1" 
                 src='<%# Eval("[photos]") %>'  BorderWidth="0"
                 alt="" style="width:300px;height:300px;display:block;"/>
    ...
</asp:DataList>

或者您使用AsDataView() 扩展方法。 OfType&lt;object&gt;() 需要将非泛型集合变为泛型集合以支持 LINQ。在这种情况下,您不需要在 Eval 方法中使用索引器:

var xx = dt.AsDataView().OfType<object>().Take(10).ToList();
dglist.DataSource = xx;
dglist.DataBind();

<asp:DataList ID="dglist" runat="server" 
    ....
           <asp:Image runat="server" id="Image1" 
                 src='<%# Eval("photos") %>'  BorderWidth="0"
                 alt="" style="width:300px;height:300px;display:block;"/>
    ....
</asp:DataList>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 2022-07-02
    相关资源
    最近更新 更多