0

データリストをカスタマイズする必要があります:

    public class DatType1
{

    public string yr;
    public string qr;
    public string mt;
    public string cw;
    public string tar;
    public string rg;
    public string mac;
    public string fuel;
    public double fp;
    public double fi;
    public double fd;

}

public class DatType2
{

    public string yr;
    public string qr;
    public string mt;
    public string cw;
    public string tar;
    public string RG;
    public double pp;
    public double pi;
    public double fp;
    public double fi;
    public double fd;


}

ご覧のとおり、両者の間には多くの重複があります。DatType1.fp、DatType1.fi、DatType1.fd の値を DateType2 に追加したいのですが、それらを適切な場所に配置する必要があります。適切な場所とは、一連の項目が等しいことを意味します。

ここのサイトをよく見ましたが、よくわかりませんでした。私はこのようにsthを試しました:

from a in TableA
from b in TableB
where a.yr==b.yr & a.qr==b.qr & a.RG == b.RG & a.tar ==b.tar
select( r=> new DatType2{....}

次に、保持したい DateType2 からすべてを括弧内に繰り返し、DatType1.fp、DatType1.fi、DatType1.fd を追加します。

これをブルート フォースで行った場合、二重の for ループを実行し、DatType1 の各行を調べて、DatType2 の行と一致する場所を確認し、DatType1.fp、DatType1.fi、DatType1.fd を追加します。スロー

しかし、これは機能せず、エレガントとは言えません! ...:) ポインタをいただければ幸いです。

ありがとう

4

2 に答える 2

0

すべての共通データを使用して、基本クラスを作成します。

public class BaseClass    
{
    public string yr;
    public string qr;
    public string mt;
    public string cw;
    public string tar;
    public string rg;
    public double fp;
    public double fi;
    public double fd;

    public void SetAllValues(BaseClass Other)
    {
        this.yr = Other.yr;
        this.qr = Other.qr;
        //til the end.
        this.fd = Other.fd;
    }

    //with this you check the equal stuff...
    public bool HasSameSignature(BaseClass Other)
    { 
        if (this.yr != Other.yr) return false;
        if (this.qr != Other.qr) return false;  
        //all other comparisons needed
        return true;
    }

    //with this you set the desired ones:
    public void SetDesired(BaseClass Other)
    {
        this.fp = Other.fp;
        this.fi = Other.fi;
        //all other settings needed
    }
}    

そして、他のものはこのベースを継承します:

public class DatType1 : BaseClass
{
    public string mac;
    public string fuel;
}


public class DatType2 : BaseClass
{
    public double pp;
    public double pi;
}

a.HasSameSignature(b)の代わりに を使用できるようになりましたa.yr==b.yr & a.qr==b.qr & a.RG == b.RG & a.tar ==b.tar。値を設定します (または、必要に応じてコピー メソッドを作成します)。

于 2013-07-22T16:25:32.193 に答える