2008年8月8日
#
知識が追いつかないけど、良いことを教えてもらったのでこっちにメモ♪
ココ
まだ
SELECT
WHERE
FROM
くらいの簡単な構文から抜け出せないww
XXXXOrDefaultの使い方もなるほどーって思いました。
先ほどの
var message = from c in doc.Element("Root")
.Elements("message")
where c.Attribute("id").Value == id.ToString()
select c;
を拡張メソッドにしてあげると。
var hoge2 = doc.Elements()
.Where(e =>e.Element("message").Attribute("id").Value==id.ToString())
.Select(e => new
{
msg = e.Element("message").Element("msg").Value
});
こんな感じ・・・・?
XML頑張らないとだめだ・・・。
LINQテクノロジ入門!(赤間本)には
「まぁ現時点では拡張メソッド方式で書く方が無難だねー!」
みたいに書かれてます。
でもMSDNとかでは
「極力埋め込み式クエリで・・・」
みたいに書かれてたり・・・。
は・じ・め・て・のLINQ TO XML。
で何か簡単なプログラムで頑張ってみる。
<?xml version="1.0" encoding="utf-8" ?>
<Root>
<message id="1">
<msg>完了しました</msg>
</message>
<message id="2">
<msg>失敗しました</msg>
</message>
</Root>
こういうmsaage.xmlを準備。
で。
やんちゃなクラスですけど・・・。
public string GetMessage(int id)
{
string msg = string.Empty;
XDocument doc = XDocument.Load(dataPath + "message.xml");
var message = from c in doc.Element("Root")
.Elements("message")
where c.Attribute("id").Value == id.ToString()
select c;
foreach (XElement result in message)
{
msg = result.Value;
}
return msg;
}
で引数で指定されたidに対応するメッセージ(がんばれ画伯とか、すごいぞ画伯とか、素敵すぐる画伯とか)が出ます。
で。
これを拡張メソッドで書き直したいんですけどうまくいかない・・・。
色々と覚書シリーズ。
デザイナで作成するのとコマンドラインから作成するdbmlファイルの違い。
【SQL Server2005(Express含む)】
コンストラクタに
public HogeExpressDataContext() :
base(global::Core.Properties.Settings.Default.HogeConnectionString1, mappingSource)
{
OnCreated();
}
というのが作成されます。
でも。
【Compact】
public Hoge(string connection) :
base(connection, mappingSource)
{
OnCreated();
}
引数を0個指定されるコンストラクタは作成されない。
デザイナで作成されるとプロジェクトのプロパティに接続文字列などを自動でセットしてくれるけど、sqlmetalさんで作成した場合はsdf単体から作成するわけだからもちろんプロジェクトのプロパティなど知ったことではない。ので作成してくれない。
作成されないと、いちいち引数を指定しないとダメで面倒なので、引数0個のコンストラクタを追加してあげるとOK。
public hoge() :
base(global::Core.Properties.Settings.Default.LunchConnectionString1, mappingSource)
{
OnCreated();
}
何にせよCompactでデザイナが使えるようになってくれると非常にうれしい・・・。
どこかに使えない理由が書いてあったですねー、探してこよっと。
LINQ TO SQLをプロジェクトに追加。hoge.dbmlというクラスが作成されますです。
で。
SQL Server 2005(Express含む)で作成したテーブルをこのdbmlに追加してあげると、(テーブル名がgahakuだとすると)
gahakudataContext
という名前でpartialクラスが作成されますhoge.designer.csの中を見るとね。
で。
これをSQL Server Compactでやろうとすると、まず、デザイナーツールは使えないので、sqlmetal.exeさんをコマンドから呼び出して.dbmlファイルを作成するわけです。
そのあたりはここを読む
で。
上記のgahakuDataContextが、単に「gahaku」になってしまいます。
それに気づかなくて、インテリセンスさんに「gahakudataContext」がないっ!
ってあせりました。
理由はよくわかりませんが、まだLINQに慣れていないので教科書通り「XXXDataContext」って出てほしいなーと・・・。
http://technet.microsoft.com/ja-jp/library/ms171757(SQL.100).aspx
でもこちらにはちゃんと「SQL Server 2005以降のManagementstudio1(つまり2008)」が必要。と書いてあったり。
ドキュメント整備が追いついてないのかどうなのか・・・。
SQL Server Compact 3.5で
http://msdn.microsoft.com/ja-jp/library/ms171805(SQL.100).aspx
と「Management Studioつかえ!」って書いてあります。
で。
http://www.microsoft.com/downloads/details.aspx?FamilyId=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&DisplayLang=ja
ここからダウンロードして!
って書いてあります。
が。
ダウンロード先では
「注 : SSMSE で Analysis Services、Integration Services、Notification Services、Reporting Services、SQL Server エージェント、SQL Server 2005 Mobile Edition は管理できません。」
って書いてあります。
この「Mobile Edition」が正しく「Compact3.5」のことを指しているのかがなぞ・・・。
いつのまにか、Office2007のリボンに慣れきっている自分発見。
慣れって大切だなーと思いました。
【未】8/16勉強会用のプログラム作成
【未】MVCふれーむわーく(笑)の勉強
【未】草抜き
終わったら【済】にする。
終わらなかったら終わったことにする。