c# - 数据表的Linq操作

标签 c# asp.net linq datatable

我正在使用 ADO.NET 填充 DataTable 并绑定(bind) 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>

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

我还有一个问题。

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

最佳答案

DataTable实现 IListSource接口(interface),即它支持数据绑定(bind)到列名的方式(因此 Eval("photos") 有效)。但是当你调用AsEnumerable()DataTable 上它将返回 IEnumerable<DataRow> DataRow在哪里对象不会有名为 photos 的属性这就是为什么你得到异常(exception)。但是如果你在你的 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<object>()需要将非泛型集合变为泛型集合以支持 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>

关于c# - 数据表的Linq操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8690111/

相关文章:

c# - 如何为 WPF TreeView 设置 DataTemplate 以显示列表的所有元素?

sql - bigint 的顺序 GUID

c# - SQL 插入语句不工作

c# - Select 内的 Linq Count,嵌套,最大限度地减少立即执行数据库依赖调用

c# - 如何在 Linq to Sql .Where() 中写入 "OR"

c# - 在 Entity Framework 查询中使用 Func<>

c# - 使用 jquery 调用带有 void 返回类型的方法后面的代码

c# - 在 Windows 8 中使用 go-between 进行流式传输

C# WebService端点问题

asp.net - SignalR - 离开所有组