実際はすでにメイキングは始まっているため、挨拶もそこそこに技術的な内容を記述します。技術的な内容とはいっても、ここでは個人的な考えをまとめているだけに過ぎません。LINQを初めて使うため、とても骨が折れる作業ですが、新しい技術を試すためか、心はまだ折れていないようです。


○技術的な問題点


匿名型のSQL結果セットをメソッドの戻り値で受取る場合、[DB名.designer.cs]ファイルに定義された型(クラス)で受取る事ができない。わざわざ、匿名型の型(クラス)を明示的に作成して、その型を戻り値としなければいけない。


(個人的な意見:)LINQの使いづらい点だと思っています。


だからといって、型や名称をもう一度書くのは、格好悪い。そこで、「一つのテーブルと複数のマスタの結果セットを取得する」場合限定になるが、できるだけコードを短く書こうと思う。

「一つのテーブルと複数のマスタの結果セットを取得する」場合とは、以下のようなテーブル構成です。


ProjectASA


(個人的な意見:)ほかにやり方があるかも知れないが、持っているLINQの技術書には載っていなかったので・・・良い方法があれば教えてほしいです。


○方式


「図:一つのテーブルと複数のマスタ」を基に話を進めます。

結局、新しい型(クラス)を作成するわけですが、その場合、[Aテーブル]の型(クラス)は[DB名.designer.cs]ファイルにあるので、このクラスを継承する。これにより、変数名や型を重複して記述しなくて済む。次に、変数として、[Bマスタ]や[Cマスタ]の型(クラス)を記述して関連を持たせる。これも同じ[DB名.designer.cs]ファイルにある。最後に、カスタム用のプロパティを記入する。これで終了。

以下にソースを掲載する。


--------------------

ソース

--------------------

public class LineItemA : Aテーブル
{


#region 変数

public Bマスタ _B;

public Cマスタ _C;


#endregion


#region コンストラクタ


public LineItemA()

{

_B = new Bマスタ();
_C = new Cマスタ();

}


#endregion


#region プロパティ


//ステータス(独自に画面用に表示させる変数)
public string EditStatus { get; set; }


//Bマスタ名称
public string コード2名称
{
get { return this._B.名称; }
set { this._B.名称= value; }
}


//Cマスタ名称
public string コード3名称
{
get { return this._C.名称; }
set { this._C.名称= value; }
}


#endregion


}

--------------------


(個人的な意見:)このやり方でもプロパティの型(ここでは「string」を指す。)を記述することになる。格好悪いが、取得カラム数が多い結果セットを取得する場合、全部書くよりはいいかも知れません。また、SQL観点で見ると、「*」でデータを持ってくるわけではないので、データ量としては未使用の変数分だけ・・・どうなのでしょうか。やはり良い解決方法を知っていれば教えてほしいです。

(仮内容)Microsoft※1の次世代技術を用いて次世代の会計ソフトを作成するプロジェクトです。これから、ProjectASA※2をよろしくお願い致します。


※1 WPF、WCF、LINQなどの技術を指します。


※2 呼び方は「プロジェクト・アサ」です。正式名称は、「Project, Accounting Software in Advance of now.」です。この意味は、「今よりも前進する会計ソフト」です。