【问题标题】:how to query strongly type datatable如何查询强类型数据表
【发布时间】:2010-10-23 02:39:39
【问题描述】:

我有一个新闻门户。

对于这个门户,我有一个带有“新闻”表和以下列的数据库 (NewsID、CategoryID、NewsTitle、NewsText、DateAdded、ImagePath、TotalRead、NewsType、isActive)

我使用数据集文件 (.xsd),对于这个,我有一个查询,它将过去 3 天的新闻返回到我编写的自定义类中,名为 HHNews。

HHNews 类有一个函数,它返回一个强类型数据表,其中包含我上面提到的查询结果。

主页有不同的新闻部分。这些是; - 头条新闻(5 项) - 小标题(4 项) - 每个新闻类别的最后 5 个新闻项目...(类别如下:体育、地方新闻、经济、

对于主页,我检索从类返回的数据表。现在我想查询这个数据表并构建我上面提到的部分......例如

如果我的数据表被称为“dt”,那么有没有办法像 sql 一样查询这个 dt,例如“select TOP(5) NewsID, NewsTitle, NewsText from dt where NewsType = 0”-- 0代表标题?

【问题讨论】:

    标签: asp.net datatable dataset strong-typing


    【解决方案1】:

    如果您使用的是 .NET 3.5,则可以使用 LINQ to DataSet

    【讨论】:

      【解决方案2】:

      您可以使用默认视图来过滤数据表,如下所示:

      dt.DefaultView.RowFilter = "NewsType = 0";

      不确定如何获得前 5 名!?

      【讨论】:

        【解决方案3】:

        如果您不在 .NET 3.5 中,您可以基于 DataTable 对象创建一个 DataView,然后在 DataView 上设置 RowFilter 属性。例如:

        DataView myDV = new DataView(dt);
        myDV.RowFilter = "NewsType = 0";
        

        然后您只能捕获 DataView 中的前 5 行。

        【讨论】:

          【解决方案4】:

          当然。你可以 use LINQ 正如 Dave Cluderay 提到的那样。例如,要检索您的标题,您可以运行:

          var myDataTable = dt.AsEnumerable();
          var headlines = myDataTable.Where(t => t.NewsID == 0).Take(5);
          

          【讨论】:

          • 是的,我从来没有发现我的瓶颈是 LINQ。当然,这确实取决于您撤回了多少新闻报道。如果超过一百或两个,您可能需要考虑在数据库中运行此逻辑并仅返回您需要的记录。
          【解决方案5】:

          如果您不在 3.5 中,则可以使用简单的 for 循环在对表格进行排序后获取前 5 行。

          【讨论】:

            【解决方案6】:

            Datatable上有一个Select方法,不要以为有办法限制返回的数量。我喜欢 LINQ 方式,但只是一种替代方式....但限制可能会忽略这一点。

            dt.Select("NewsType = 0");
            

            【讨论】:

              猜你喜欢
              • 2012-12-12
              • 2010-12-24
              • 2020-05-05
              • 1970-01-01
              • 2016-12-16
              • 2021-04-22
              • 2021-06-21
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多