実際はすでにメイキングは始まっているため、挨拶もそこそこに技術的な内容を記述します。技術的な内容とはいっても、ここでは個人的な考えをまとめているだけに過ぎません。LINQを初めて使うため、とても骨が折れる作業ですが、新しい技術を試すためか、心はまだ折れていないようです。
○技術的な問題点
匿名型のSQL結果セットをメソッドの戻り値で受取る場合、[DB名.designer.cs]ファイルに定義された型(クラス)で受取る事ができない。わざわざ、匿名型の型(クラス)を明示的に作成して、その型を戻り値としなければいけない。
(個人的な意見:)LINQの使いづらい点だと思っています。
だからといって、型や名称をもう一度書くのは、格好悪い。そこで、「一つのテーブルと複数のマスタの結果セットを取得する」場合限定になるが、できるだけコードを短く書こうと思う。
「一つのテーブルと複数のマスタの結果セットを取得する」場合とは、以下のようなテーブル構成です。
(個人的な意見:)ほかにやり方があるかも知れないが、持っている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観点で見ると、「*」でデータを持ってくるわけではないので、データ量としては未使用の変数分だけ・・・どうなのでしょうか。やはり良い解決方法を知っていれば教えてほしいです。
