Upload
nia-tomonaka
View
309
Download
1
Embed Size (px)
Citation preview
1
智中ニア( @nia_tn1012 )
業務系システム勉強会 WPF 入門 #4 at イメージ情報開発株式会社
WPF アプリを作って、情報アシスタントの業務を効率化
05/02/2023
2
1. About me2. 作った WPF アプリ3. そのアプリで利用した LINQ
目次
3
• 智中 ニア ( Nia Tomonaka ) / @nia_tn1012
• 湘南生まれの学生• プログラミング言語 : C# / XAML / PHP• 好物 : 紅茶とコーヒー、シラス丼 etc.• 趣味 : 写真撮影 / 音ゲー( Reflec Beat など)
• たまにイラストを描いています• 最近、ブログを KUSANAGI に移行しました
1. About me
4
• フォームに入力するだけで日報の本文データを作成する、「日報メーカー」
2. 作った WPF アプリ
5
• 大学の情報アシスタントでは、毎日の業務内容を日報として記入し、メールで送信
2.1. 開発したきっかけ
◆ 勤怠概要 勤務時間 : 8:40 ~ 12:40
◆ 業務概要 8:40 ~ 10:25 : 自習室として運営しました。 ( 備考 : 利用者数は 16 名程でした。 ) 10:30 ~ 12:00 : 授業「プログラミング演習 A 」のサポートをしました。 12:00 ~ 14:30 : 自習室として運営しました。 ( 備考 : 利用者数は 32 名程でした。 )
◆ PC 、ソフトウェアなどのトラブル 0 件 特にありませんでした。
◆ 質問 2 件 ・・・
注:この日報はサンプルです。
6
• 1 文ごとにインデントを合わせるのが煩雑• 項目の記入漏れや件数の数え間違いなどの問題が起きることがある
⇒ アプリで解決
2.1. テキストで直接入力する課題点
7
• LINQ to XML の Elements メソッド• インデックス付きの Select メソッド• OrderBy メソッドと ThenBy メソッド(後日ブログで・・・)
3. 今回作成したアプリで利用した LINQ
8
• LINQ to XML は、 LINQ を使って XML データを操作する機能• 例えば、 XElement クラスにある Elements メソッドは指定した
要素名に一致する、 XElement のシーケンス( IEnumerable<XElement> )を取得
3.1. LINQ to XML の Elements メソッド
<list> <fruit id=“1”> リンゴ </fruit> <fruit id=“2”> バナナ </fruit> <fruit id=“3”> みかん </fruit></list>
IEnumerable<XElement><fruit id=“1”> リンゴ </fruit><fruit id=“2”> バナナ </fruit><fruit id=“3”> みかん </fruit>
list.Elements( “fruit” )
9
• 今回作成したアプリでは、入力したデータを XML ファイルに保存する機能があり、そのファイルを読み込む時、以下ように操作
1. LINQ to XML の Elements メソッドで、リストの項目名を指定し、 IEnumerable<XElements> を取得
2. 1. の戻り値に Select メソッドをつなげて、各要素である XElementsからリストの項目用に定義したクラス型に射影
3.1. LINQ to XML の Elements メソッド
questionlist.Elements( “question” ).Select( item => new QuestionItem{ QuestionItem = DateTime.Parse( item.Attribute( “time” ).Value ), Question = item.Element( “question” ).Value, Answer = item.Element( “answer” ).Value })
10
<questionlist> <question time=”9:00”> <question> 質問 1</question> <question> 回答 1</question> </question> <question time =”10:00”> <question> 質問 2</question> <question> 回答 2</question> </question></questionlist>
IEnumerable<XElement><question time=“9:00”> <question> 質問 1</question> <question> 回答 1</question></question><question time=“10:00”> <question> 質問 2</question> <question> 回答 2</question></question>
IEnumerable<QuestionItem>QuestionItem { QuestionTime = 9:00, Question = “ 質問 1”, Answer = “ 回答 1”}QuestionItem { QuestionTime = 10:00, Question = “ 質問 2”, Answer = “ 回答 2”}
11
• Select メソッドには、以下の 2 種類がオーバーロードされている
3.2. インデックス付きの Select メソッド
IEnumerable<Fruit>リンゴバナナみかん
リンゴバナナみかん
リンゴ 0バナナ 1みかん 2
要素にインデックスを付けて列挙
要素のみを列挙
12
• 今回作成したアプリでは、日報の本文データ作成する時、リストの項目に番号を付けて出力
3.2. インデックス付きの Select メソッド
StringBuilder sb = new StringBuilder()
sb.Append( $“◆ 質問 {questionList.Count} 件” );foreach( var item in questionList .Select( ( val, index ) => new { No = index + 1, Vaule = val } )) { sb.AppendLine( $” [{item.No}]” ); sb.AppendLine( $” 質問時刻 : {item.Value.Time.ToString( “H:mm” )}” ); sb.AppendLine( $” Q. {item.Value.Question}” ); sb.AppendLine( $” A. {item.Value.Answer}” );}
13
3.2. インデックス付きの Select メソッド
IEnumerable<QuestionItem>QuestionItem { QuestionTime = 9:00, Question = “ 質問 1”, Answer = “ 回答 1”}QuestionItem { QuestionTime = 10:00, Question = “ 質問 2”, Answer = “ 回答 2”}
◆ 質問 2 件 [1] 質問時刻 : 9:00 Q. 質問 1 A. 回答 1 [2] 質問時刻 : 10:00 Q. 質問 2 A. 回答 2
14
ご清聴ありがとうございました!
Thank you !