row.countやtables.countを見ることができますが、データセットが空であるかどうかを確認する他の方法はありますか?C#では、データセットが空であるかどうかをテストする最良の方法は何ですか?
答えて
私のようなものを示唆している: -
bool nonEmptyDataSet = dataSet != null &&
(from DataTable t in dataSet.Tables where t.Rows.Count > 0 select t).Any();
編集:私はかなり十分に考慮した後に、コードをクリーンアップしているを、私はこれは非常にきれいだと思います。 .Any()の使用に関するインスピレーションのためにキースに感謝します。ここではキースの提案に沿って
は、このアプローチの拡張メソッドのバージョンがある: -
public static class ExtensionMethods {
public static bool IsEmpty(this DataSet dataSet) {
return dataSet == null ||
!(from DataTable t in dataSet.Tables where t.Rows.Count > 0 select t).Any();
}
}
注意、キースは当然彼のポストのコメントで私を修正して、この方法は、場合でも動作しますデータセットはnullです。
明らかにするには、すべてのDataTableを確認し、各DataTableの行数を確認する必要があります。
私は英語の文のように読むべきコードの下にその目的
のために小さな静的utilのクラスを作成しました。
public static bool DataSetIsEmpty(DataSet ds)
{
return !DataTableExists(ds) && !DataRowExists(ds.Tables[0].Rows);
}
public static bool DataTableExists(DataSet ds)
{
return ds.Tables != null && ds.Tables.Count > 0;
}
public static bool DataRowExists(DataRowCollection rows)
{
return rows != null && rows.Count > 0;
}
私はちょうど以下のコードのようなものを置いてそれで済むでしょう。 の可読コードの書き込みはカウントされます。
if (DataAccessUtil.DataSetIsEmpty(ds)) {
return null;
}
これは、読みやすさを向上させるためにC#3の拡張メソッドを使用できる場所だと思います。拡張メソッドは常にチェックされているデータセットがnullの場合、これはでも動作するコンパイラによって展開されているという事実にkronozのアイデアを使用して
...
public static bool IsNotEmpty (this dataset)
{
return dataSet != null && (
from DataTable t in dataSet.Tables
where t.Rows.AsQueryable().Any()
select t).AsQueryable().Any();
}
//then the check would be
DataSet ds = /* get data */;
ds.IsNotEmpty();
。
は、コンパイル時にこれが変更されます。
ds.IsNotEmpty();
//becomes
DataSetExtensions.IsNotEmpty(ds);
これは良いアイデアですが、ペダンティックであるために、t.Rows.Any()の行はdataSet.Tables.Rowsがコンパイルされないため、IEnumerable
ああ、ひどく重大なことには申し訳ありませんが、データセットがnullの場合は拡張メソッドが機能しません。むしろNullReferenceExceptionが発生します。さらに、IsEmpty()は、それが必要とするものとは逆の結果を返しています - 空でないかどうかを示します。 – ljs
フィードバックいただきありがとうございます。しかし、それはnullsで動作します。 – Keith
#region Extension methods
public static class ExtensionMethods
{
public static bool IsEmpty(this DataSet dataSet)
{
return dataSet == null || dataSet.Tables.Count == 0 || !dataSet.Tables.Cast<DataTable>().Any(i => i.Rows.Count > 0);
}
}
#endregion
キャストし、そのようなすべての行を介して "手動で"チェックすることをお勧めしますか? – Kache
- 1. IDataReaderが空であるかどうかを検出する最良の方法は何ですか?
- 2. ユーザーがBashでsudoできるかどうかをテストする最良の方法は何ですか?
- 3. HTML5ウェブサイトをテストする最良の方法は何ですか?
- 4. javascriptをテストする最良の方法は何ですか?
- 5. MVCリポジトリをテストする最良の方法は何ですか?
- 6. Atom Serverをテストする最良の方法は何ですか?
- 7. RedirectToActionをテストする最良の方法は何ですか?
- 8. オブジェクトがIEnumerableであるかどうかをテストする最も簡単な方法は何ですか?
- 9. tdd/bddのレールでモンゴイドモデルをテストする最良の方法は何ですか?
- 10. C#でレーダーをシミュレートする最良の方法は何でしょうか?
- 11. rSpecでdelayed_jobチェーンをテストする最良の方法は何ですか?
- 12. LabでHapiJSプラグインをテストする最良の方法は何ですか?
- 13. RubyでアプリケーションAPIライブラリをテストする最良の方法は何ですか?
- 14. JUnitでコントローラとサービスをテストする最良の方法は何ですか?
- 15. AndroidでP2Pアプリケーションをテストする最良の方法は何ですか?
- 16. PHPUnitでSeleniumテストを整理する最良の方法は何ですか?
- 17. ジェネリック型が文字列かどうかをテストする最良の方法? (C#)
- 18. C#でMongoDB Query Reportingの最良の方法は何ですか?
- 19. C/C++でテキストファイルを暗号化する最良の方法は何ですか?
- 20. テーブルの列が空であるかどうかを確かめる良い方法はありますか?
- 21. 何かがChai.shouldの関数であるかどうかをテストする方法
- 22. grailsでサービスを扱う最良の方法は何ですか
- 23. Rails 5のアプリケーションコントローラレスキューステータスコードをテストする最良の方法は何ですか?
- 24. Dartの単体テストを作成する最良の方法は何ですか?
- 25. プライベートなステートレスコンポーネントの機能をテストする最良の方法は何ですか?
- 26. C++からnetlinkを使用する最良の方法は何ですか?
- 27. DLL機能をテストする最良の方法は何ですか?
- 28. ラムダAPIをセットアップしてテストする最良の方法は何ですか?
- 29. Silverlight 5クラスライブラリをテストする最良の方法は何ですか?
- 30. C#でモナドを実装する最良の方法は何ですか
私はこれをあまりにも何度も編集しました...今はコミュニティの投稿です!しかたがない。 :-) – ljs