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

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

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

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

LINQ

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

Q&A

解決済

1回答

648閲覧

C# リストをリストで検索

zz123

総合スコア6

C#

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

LINQ

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

0グッド

0クリップ

投稿2021/11/26 02:49

文字列リストに含まれる文字列で始まるメンバを持つクラスのリストを取得したいです。

// データクラス

public class Data { public int val = 1; public string name = string.Empty; }
// 検索するデータリスト
List<Data> dataList = new List<Data>{ new Data(val = 1, Name = "aaa"), // data1 new Data(val = 2, Name = "ddd"), // data2 new Data(val = 3, Name = "bbb1") // data3 };
// 検索文字列
List<string> targetList = new List<string> { "aaa", "bbb", "ccc" };

Data.name が targetList 中のどれかの文字列で始まる dataList 要素を取得したいです。
↓のようにベタに書くことはできるのですが、Linq で簡単にまとめる方法はないでしょうか。

List<Data> resultList = new List<Data>(); foreach (var data in dataList) { foreach (var targetStr in targetList) { if (data.name.StartsWith(targetStr) == true) { resultList.Add(data); } } }

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

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

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

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

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

Zuishin

2021/11/26 03:03

この場合はクエリ構文を使うと何も悩まずできます。 from data in dataList from targetStr in targetList where data.name.StartsWith(targetStr)
zz123

2021/11/26 04:56

確かにクエリならいけますね。ありがとうございました。
Zuishin

2021/11/26 05:10

クエリ構文「なら」ではなくクエリ構文「でも」できるということです。 私自身はクエリ構文を使うことはほとんどありませんが、他人に聞かなければいけないほど複雑なら、簡単な書き方を覚えておくと次は自分でできるでしょう。
guest

回答1

0

ベストアンサー

var resultList = dataList.Where( d => targetList.Any( tgt => d.name.StartsWith(tgt) ) ).ToList();

でどうでしょうか.

投稿2021/11/26 03:01

fana

総合スコア11996

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

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

zz123

2021/11/26 04:57

とてもシンプルで望んでいた形です。大変ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問