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

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

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

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

LINQ

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

Q&A

解決済

1回答

3279閲覧

c#のLINQを使用して以下のことを実現したい。

henoheno

総合スコア13

C#

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

LINQ

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

0グッド

1クリップ

投稿2015/10/01 06:46

DBから、SELECTした結果のものが変数Zに格納されております。
そして、この変数Zをブレークポイントを使用して中身をvisualstudioC#で
確認すると以下のような構造をしております。

z|Cont=9

[0] |Count=3 //zにカーソルを合わせた結果
[1] |Count=3
[2] |Count=3
[3] |Count=3
[4] |Count=3
[5] |Count=3
[6] |Count=3
[7] |Count=3
[8] |Count=3

[0] |{[NO1,AAA]} //[0]にカーソルを合わせた結果 [1] |{[NO2,DDD]} [2] |{[NUM,500]}

DB(Table)は下記のようなイメージです。

NO1,NO2,NUM

AAA,DDD,500
AAA,EEE,600
AAA,FFF,400
BBB,GGG,200
BBB,HHH,300
BBB,III,900
CCC,JJJ,700
CCC,KKK,500
CCC,LLL,900

DBから9行分のデータをSELECTしてます。列名(項目)はNO1,NO2,NUMの三つです。
NO1とNO2は、UNIQとなっております。(他の行との重複はない)

また、DBから取得した変数の型はXMLManagerです。XMLManager xmlのようにxmlという変数を定義します。 ただ、その後、z = new List<DICTIONARY>();とした変数zを生成し、 z = xml.dataRows;で代入しております。

ここからが本題なのですが、

① NO1がAAAとなるものをLINQを使用して瞬時に抽出する方法を教えてください。

② ①で取得したものをList<DICTIONARY>()型の変数に代入する方法を教えてください。

①について、上記テーブルで言いますと、

AAA,DDD,500
AAA,EEE,600
AAA,FFF,400

を指します。

近い方法として、NO1がAAA,NO2がEEEのときのNUM(600)を変数xに格納するときのやり方は下記の通りでうまくいきました。

var getItem = z.Where((item) => item["NO1"] == "AAA" && item["NO2"] == "EEE").FirstOrDefault();

string x = getItem["NUM"];

上記を応用すればいいと思うのですが、いまいち分かりません。

②について、①で取得した

AAA,DDD,500
AAA,EEE,600
AAA,FFF,400

を下記のlistという変数に代入することを目的とします。

List<DICTIONARY> list = new List<DICTIONARY>();

その後、

foreach (DICTIONARY d in list){

string no1 = d["NO1"]; string no2 = d["NO2"]; string num = d["NUM"];

}
のようにして1レコードづつforeachを使って処理をしたいです。

恐れ入りますが、ご回答の程、お願い致します。

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

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

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

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

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

Tak1wa

2015/10/01 06:52

XMLManagerとは何ですか。オリジナルのクラスですか?
henoheno

2015/10/01 07:58

オリジナルと思われます。
guest

回答1

0

ベストアンサー

こんにちは。

こんなかんじです。

C#

1List<Dictionary<string, string>> z = GetHoge(); 2foreach (var d in z.Where((item) => item["NO1"] == "AAA")) 3{ 4 string no1 = d["NO1"]; 5 string no2 = d["NO2"]; 6 string num = d["NUM"]; 7 Console.WriteLine(string.Format("no1:{0}, no2:{1}, num:{2}", no1, no2, num)); 8} 9Console.ReadKey();

投稿2015/10/01 07:10

Tak1wa

総合スコア4791

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

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

henoheno

2015/10/01 07:54

Tak1waさん ご回答いただき有難う御座います。 ですが、いただいた記述例は既に検証済みです。 行いたいことはNo1のAAA,BBB,CCC毎(単位)のレコードをlist変数に代入してまずは保持することです。 そのlist変数をあるメソッドに入力引数として渡したいのです。 恐れ入りますが、ご教授お願いいたします。
Tak1wa

2015/10/01 07:59

Listに代入したいならば、List<Dictionary<string, string>> list = z.Where((item) => item["NO1"] == "AAA").ToList();としてください。
henoheno

2015/10/01 09:10

動作確認しました。 希望通りのことが教えていただいた記述で達成できました。 ありがとうございます。 非常に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問