回答編集履歴

1

追記

2017/10/06 21:49

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -1,5 +1,43 @@
1
- `...Where(x => x.IsXxx())...`
1
+ `... .Where(x => x.IsXxx()). ...`
2
2
 
3
3
 
4
4
 
5
5
  という案が考えられると思います。Dataという名前ありクラスなので、そのメンバーのみに基づいた判定処理はDataクラス外に記述するのではなくDataのメソッド(おそらくは何か有意な名前が付けられる)であるはずと思えるのです。
6
+
7
+
8
+
9
+ ---
10
+
11
+ 追記:
12
+
13
+
14
+
15
+ 上の回答はDataがそれなりの意味を持つクラスであるときのクラス設計の側面から見たものですが、Dataが匿名クラスあるいはそれに近いもの(所謂データクラス)の場合を想定し、単にコードの局所的な煩雑さの軽減案も一応考えてみました。小手先のテクニックという感はあり、効率的には質問者さんのコードよりは微妙に落ちると思います。改悪とみるかアリとみるかは意見が分かれるかも知れません。
16
+
17
+
18
+
19
+
20
+
21
+ `... .Where(x => new [] { x.ID1, x.ID2, x.ID3, x.ID4, x.ID5 }.All(id => id == "")). ...`(1)
22
+
23
+ `... .Where(x => Utilities.AllEmpty(x.ID1, x.ID2, x.ID3, x.ID4, x.ID5)). ...`(2)
24
+
25
+
26
+
27
+ (1)はあくまでこの行のみで完結した実装です。(2)は複数のstringに対する空文字列かの判定が複数個所にあり以下のようなユーティリティーを用意した場合のコードです。(C#6ならusing staticを使ってクラス名Utilitiesも省略できるそうです)
28
+
29
+
30
+
31
+ ```C#
32
+
33
+ public static class Utilities {
34
+
35
+ public static bool AllEmpty(params string[] ss) {
36
+
37
+ return ss.All(s => s == "");
38
+
39
+ }
40
+
41
+ }
42
+
43
+ ```