質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

Q&A

解決済

1回答

650閲覧

Linq 対象データ抽出方法について

ShouOkada

総合スコア46

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

0グッド

0クリップ

投稿2017/10/04 14:16

var listData = new List<Data>() { new Data {TEST1="1",TEST2="2", TEST3="3",ID1= "1",ID2= "2",ID3="3",ID4="4",ID5="5"}, new Data {TEST1="1",TEST2="2", TEST3="3",ID1= "1",ID2= "2",ID3="3",ID4="4",ID5="5"}, new Data {TEST1="1",TEST2="2", TEST3="3",ID1= "1",ID2= "2",ID3="3",ID4="4",ID5="5"}, new Data {TEST1="1",TEST2="2", TEST3="3",ID1= "1",ID2= "2",ID3="3",ID4="4",ID5="5"}, new Data {TEST1="1",TEST2="2", TEST3="3",ID1= "",ID2= "",ID3="",ID4="",ID5=""}, };

このようなリストのデータからLinqを使って、「ID1~ID5」がすべて空白のものを取得したいのですが、下記の記述より簡単な方法はありますでしょうか?

var test = listData.Where(x => x.ID1 == "" && x.ID2 == "" && x.ID3 == "" && x.ID4 == "" && x.ID5 == "").ToList();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

... .Where(x => x.IsXxx()). ...

という案が考えられると思います。Dataという名前ありクラスなので、そのメンバーのみに基づいた判定処理はDataクラス外に記述するのではなくDataのメソッド(おそらくは何か有意な名前が付けられる)であるはずと思えるのです。


追記:

上の回答はDataがそれなりの意味を持つクラスであるときのクラス設計の側面から見たものですが、Dataが匿名クラスあるいはそれに近いもの(所謂データクラス)の場合を想定し、単にコードの局所的な煩雑さの軽減案も一応考えてみました。小手先のテクニックという感はあり、効率的には質問者さんのコードよりは微妙に落ちると思います。改悪とみるかアリとみるかは意見が分かれるかも知れません。

... .Where(x => new [] { x.ID1, x.ID2, x.ID3, x.ID4, x.ID5 }.All(id => id == "")). ...(1)
... .Where(x => Utilities.AllEmpty(x.ID1, x.ID2, x.ID3, x.ID4, x.ID5)). ...(2)

(1)はあくまでこの行のみで完結した実装です。(2)は複数のstringに対する空文字列かの判定が複数個所にあり以下のようなユーティリティーを用意した場合のコードです。(C#6ならusing staticを使ってクラス名Utilitiesも省略できるそうです)

C#

1public static class Utilities { 2 public static bool AllEmpty(params string[] ss) { 3 return ss.All(s => s == ""); 4 } 5}

投稿2017/10/04 15:28

編集2017/10/06 21:49
KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShouOkada

2017/10/07 07:08

わかりました、ありがとうございますm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問