kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

LINQ to XML大助かり

もともと.NET FrameworkXMLプログラムってほとんどしたことないのですが、それでもLINQ to XMLの便利さにはいたく感動しています。今までの環境*1だとたぶん300行くらい使って書くようなプログラムがわずか4行。もちろんその裏でコンパイラさんやランタイムさんが頑張ってくれているのは言うまでもないのですが。

var lists1 = from xmldat in hoge
                  where xmldat.条件1.Length == 0
                  select xmldat;
var lists2 = from xmldat in hoge
                  where xmldat.条件1.Length > 0
                  select xmldat;
XElement xEle = new XElemet("ROOT",
                      new XElement("Node", 
                      lists1.Select(p => 
                          new XElement("Element1", p.name)),
                          list2.Select(t => new XElement("Element1", t.name), new XAttribute("value", t.attribute)))));

こんな感じかな。多分間違っているので、雰囲気だけ。メンバの内容に特定の値が含まれていれば属性を追加してXML treeを作るなんてことが一文でできるのはちょっと感動です。あと、Visual Studioの自動インデントも構文確認に大いに役立ちます。適切なインデントが行われなかった場合、たぶん間違いなくXMLの構文間違いを指摘されます…無視して実行すると、なんど例外が起きたか(;-;)。
こことは直接関係ないですが、Visual BASICはソース中にXMLリテラルを直接書いて、カラーハイライトが行われます。これデモンストレーター向け機能だろうと思っていたら、単体テストで使うときに便利だということに今日気づきました。XDocument.Parse()で書いてもいいんだけど、ダブルクォーテーションの前に\を書くのめんどくさい…。
もう一つ、ラムダ式の一時変数って、ちょっと間違えるとスペースバーを押したタイミングで、行末に移動してしまうので、やや困ってます。.NET Frameworkもキーワードなどが多く増えてアルファベットや記号であきのありそうなものなんてそうそうありません。こんなので困っているの私だけ?
MSDN Libraryも多少参考にするのですが、実際の書き方としてはどうも役に立つ記述ってほとんど見かけないのです。書き方にちょっと困ったらPro LINQを読んで参考にさせていただいています。洋書だけど非常に助かります。

Pro LINQ: Language Integrated Query in C# 2008 (Windows.Net)

Pro LINQ: Language Integrated Query in C# 2008 (Windows.Net)

あ、ちなみにこの本にクエリ構文はほとんど出てきません。ほとんどと書いているけど、実例コーナーでは多分一つもないです。

*1:Visual StudioJavaではない