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 但我需要将它们放在正确的位置,正确的位置意味着一堆项目是相等的。

我在这里的网站上看了很多,但无法弄清楚。我已经尝试过这样的事情:

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。

如果我用蛮力做到这一点,我会做一个双循环并遍历 DatType1 的每一行,看看我在哪里匹配 DatType2 中的一行,然后添加 DatType1.fp、DatType1.fi、DatType1.fd - 但这会非常减缓

然而,这并没有奏效,而且远非优雅!...:) 任何指针将不胜感激。

谢谢

4

2 回答 2

0

我建议重载两个对象的相等比较以生成DatType1:IEquatable<DatType2>and/or DatType2:IEquatable<DatType1>。这将允许您使用dat1.Equals(dat2)or dat2.Equals(dat1)

或者,您可以实现一个比较委托并将其作为dat1.Equals(dat2,comparer)or传递comparer.Compare(dat1,dat2)。如果您无法控制DatType1orDatType2类型,则后者可能是理想的。

于 2013-07-22T18:01:23.133 回答
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 回答