0

呼び出された識別子によって 2 つの配列を照合しseqNum、数学から答えを得るコードをいくつか書きました。seqNumとを印刷することはできAnswerますが、 に付随する他のすべての情報を取得するのに問題がありseqNumます。私はこのようなものを出力できるようにしたい:

Name Date `seqNum` Answer... 

seqNum私のコードは私に答えを与えていますが、ファイルの最初の名前を異なるs とsで何度も何度も吐き出しますAnswer

コードは次のとおりです。

private void executeBtn_Click(object sender, EventArgs e)
{
    //NET OIL VARIANCE MATHEMATICS
    if (netOilRadBtn.Checked)
    {
        using (var sw = new StreamWriter("testNetOil.csv"))
        {
            var items = netOil.Zip(seqNum, (oil, seq) => new { Oil = oil, Seq = seq });
            var items2 = netOil2.Zip(seqNum2, (oil, seq) => new { Oil = oil, Seq = seq });
            sw.WriteLine("Lease Name, Field Name, Reservoir, Operator, County, ST, Majo, Resv Cat, Discount Rate, Net Oil Interest, Net Gas Interest, Working Interest, Gross Wells, Ultimate Oil, Ultimate Gas, Gross Oil, Gross NGL, Gross Gas, Net Oil, Net Gas, Net NGL, Revenue To Int., Oper. Expense, Total Invest., Revenue Oil, Revenue Gas, Operating Profit, Revenue NGL, Disc Net Income, SEQ, Well ID, INC ASN, Life Years, Own Qual, Production Tax, NET OIL VARIANCE");

            foreach (var item in items.Join(items2, i => i.Seq, i => i.Seq, (a, b) => new
            {SeqID = a.Seq, Answer = this.GetTheAnswer(Convert.ToDouble(a.Oil), Convert.ToDouble(b.Oil)) 

            }))

            {
                int x = 0;
                x.Equals(item.SeqID);
                while (x != -1)
                {
                    sw.WriteLine(leaseName[x] + "," + item.SeqID + "," + item.Answer);
                    x--;
                }

したがって、基本的には、一致する名前を正しいseqNumとで出力するだけですAnswer。誰かが何かアイデアやコメントを持っていれば、それは大歓迎です. そして、誰かが見る必要がある場合、私の数学の方法は非常に簡単です:

public double GetTheAnswer(double first, double second)
{
    double answer = (first - second) / second;
    return answer;
}
4

2 に答える 2

1

まあ、匿名型にデータを含める必要があります

foreach (var item in items.Join(items2, i => i.Seq, i => i.Seq, (a, b) => new
   {
        SeqID = a.Seq, 
        Answer = this.GetTheAnswer(Convert.ToDouble(a.Oil),
                                   Convert.ToDouble(b.Oil)),
        Name = a.Name, // b.Name?
        Date = a.Date, // b ?
        seqNum  = a.seqNum // b ?
   }))

( while) 内でループして何をしようとしていforeachますか? 反復データを含まない匿名型のコレクションをループ処理します。これitemは単なるフラット データのコレクションです。

したがって、その後int x = 0;はすべて無駄です。収集したデータを匿名型で行ごとに出力するだけです。ヘッダー ("Lease Name, Field Name, Reservoir, Operator, ...) ははるかに長いので、この部分にはもっと多くの情報が必要だと思いますnew { ... }

于 2013-06-10T18:49:21.967 に答える
0

x に値を与えていないため、x の割り当てを変更する必要があります。

int x = Convert.ToInt32(item.SeqID);

試してみて、異なる結果が得られるかどうかを確認してください。

于 2013-06-10T16:40:34.893 に答える