強く型付けされたデータテーブルをクエリする方法
-
03-07-2019 - |
質問
ニュースポータルがあります。
このポータルには、「ニュース」というデータベースがあります。表と次の列 (NewsID、CategoryID、NewsTitle、NewsText、DateAdded、ImagePath、TotalRead、NewsType、isActive)
データセットファイル(.xsd)を使用します。このファイルには、過去3日間のニュースを、HHNewsという名前のコーディングしたカスタムクラスに返すクエリがあります。
HHNewsクラスには、上記のクエリの結果を含む厳密に型指定されたデータテーブルを返す関数があります。
ホームページにはニュース用のさまざまなセクションがあります。これらは次のとおりです。 -見出し(5アイテム) -小見出し(4アイテム) -各ニュースカテゴリの最後の5つのニュースアイテム...(カテゴリは、スポーツ、ローカルニュース、経済学など、
ホームページでは、クラスから返されたデータテーブルを取得します。ここで、このデータテーブルを照会し、上記のセクションを作成します。例:
私のデータテーブルが「dt」と呼ばれる場合、「select TOP(5)NewsID、NewsTitle、NewsType = 0」のNewsTextなど、このdtをsqlのようにクエリする方法があります。 -見出しを表す0?
解決
もちろんです。 Dave Cluderayが述べたように、 LINQを使用できます。たとえば、見出しを取得するには、次を実行できます。
var myDataTable = dt.AsEnumerable();
var headlines = myDataTable.Where(t => t.NewsID == 0).Take(5);
他のヒント
LINQ to DataSet を使用できます.NET 3.5。
.NET 3.5を使用していない場合は、DataTableオブジェクトに基づいてDataViewを作成し、DataViewでRowFilterプロパティを設定できます。例:
DataView myDV = new DataView(dt);
myDV.RowFilter = "NewsType = 0";
その後、DataViewの最初の5行のみをキャッチできます。
デフォルトビューを使用して、データテーブルを次のようにフィルタリングできます。
dt.DefaultView.RowFilter =" NewsType = 0&quot ;;
トップ5の獲得方法がわからない!?
3.5以外の場合は、単純なforループを使用して、テーブルをソートした後に上位5行を取得できます。
DatatableにはSelectメソッドがありますが、返される量を制限する方法があるとは思わないでください。私はLINQの方法が好きですが、ただの代替手段....しかし、制限はこれを除外するかもしれません。
dt.Select("NewsType = 0");