0

4 つのデータベースに接続するプログラムがあります。これらのデータベースのうち 3 つで、エンティティ オブジェクトは非常に似ています。今、私の質問は非常に単純ですが、どのように進めるかについて頭を悩ませることはできません.

私は 3 つのデータベースを持っています。それらを 1 2 と 3 と呼びましょう。複数のテーブル ab と c

1aと2aと3aはほぼ同じなので、このようなことをする方法はありますか。?

Using(interfaceDB DB = new DB1())
{
   var getTabelA = (from a in DB.a select a);
}
Using(interface DB = new DB2())
{
   var getTabe2A = (from a in DB.a select a);
}
Using(interface DB = new DB3())
{
   var getTabe3A = (from a in DB.a select a);
}
foreach(interfaceDBTableA in getTabelA)
{
   //do something here
}
foreach(interfaceDBTableA in getTabe2A )
{
   //do something here
}
foreach(interfaceDBTableA in getTabe3A )
{
   //do something here
}

基本的に、ループ部分を独自のメソッドに入れて、個々のテーブルにカスタマイズする必要なく再利用できることを願っていますか?

4

1 に答える 1

0

次のように、オブジェクトに共通するメンバーを含むインターフェースを定義できます。

public interface ICommonStuff
{
    int CommonInt
    {
        get;
    }

    string CommonString
    {
        get;
    }
}

...次に、そのインターフェイスをクラスAに実装しBC

public class A : ICommonStuff
{
    public int AInt { get; set; }

    public string AString { get; set; }

    public int CommonInt
    {
        get { return this.AInt; }
    }

    public string CommonString
    {
        get { return this.AString; }
    }
}

public class B : ICommonStuff
{
    public int BInt { get; set; }

    public string BString { get; set; }

    public int CommonInt
    {
        get { return this.BInt; }
    }

    public string CommonString
    {
        get { return this.BString; }
    }
}

... (same for C)

次に、次のようにそれらを選択できるはずです。

using (interfaceDB DB = new DB1())
{
    var getTable1A = (from a in DB.a select a).Cast<ICommonStuff>();
}

using (interface DB = new DB2())
{
    var getTable2A = (from a in DB.a select a).Cast<ICommonStuff>();
}

using (interface DB = new DB3())
{
    var getTable3A = (from a in DB.a select a).Cast<ICommonStuff>();
}

var everythingLikeA = getTable1A.Concat(getTable2A).Concat(getTable3A);

foreach (ICommonStuff commonStuff in everythingLikeA)
{
    // do something here with commonStuff.CommonInt and commonStuff.CommonString
}
于 2012-04-20T10:40:25.310 に答える