2

私はプログラミングに非常に慣れていないので、これを回避する方法を見つけることができないようです。たぶんもっと良い方法もあります。

データベースの 1 つの行から 2 つの値を取得しようとしています。EFを使用して接続しました。

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

using (var myEntities = new dataEntities())
{
  var myValues = (from values in myEntities.PointValues
                  where values.PointID == dataValue && values.DataTime >= fromDate && values.DataTime <= toDate
                  select new
                  { values.DataTime,
                    values.DataValue
                  }).ToList();

次に、次のコードを使用してそれらをファイルに書き込みます。

using (StreamWriter sw = new StreamWriter(@"c:\Test.csv"))
        {
          for (var i = 0; i < myValues.Count; i++)
          {
            sw.WriteLine(myValues[i]);
          }
        }

問題は、結果の CSV ファイルが次のようになることです: { DataTime = 1/20/2010 2:15:00 AM, DataValue = 11.72 }

{DataTime =、DataValue、および終了}を取り除くにはどうすればよいですか? (DataTime と DataValue は、データベースのフィールド ラベルです)。

ご協力いただきありがとうございます。

敬具、

ジュリアン

4

2 に答える 2

1

最後に別の選択を追加します。

var myValues = (from values in myEntities.PointValues 
               where values.PointID == dataValue 
                     && values.DataTime >= fromDate 
                     && values.DataTime <= toDate 
               select new 
               { values.DataTime, 
                 values.DataValue 
               })
               .ToList()
               .Select(x => string.Format("{0}, {1}", x.DateTime, x.DataValue);

さらに、 StreamWriter の追加機能が必要ない場合は、File.WriteAllLines()を使用することもできます。

File.WriteAllLines(@"c:\Test.csv", myValues);

リードの投稿ごとに更新

于 2012-06-14T20:04:30.017 に答える
1

情報を書き出す方法を変更するだけです。

using (var sw = new StreamWriter(@"c:\Test.csv"))
{
    foreach(var value in myValues)
    {
        sw.WriteLine(string.Format("{0}, {1}", value.DataTime, value.DataValue));
    }
}

現時点では、必要に応じて書式設定された出力を作成するのではなく、匿名クラスを直接書き出しています。

または、クエリで文字列を直接作成し、次を使用して結果を簡単に書き込むこともできます。

 var myValues = (from values in myEntities.PointValues
              where values.PointID == dataValue && values.DataTime >= fromDate && values.DataTime <= toDate
              select new 
              { values.DataTime, 
                values.DataValue 
              })
             .AsEnumerable()
             .Select(v => string.Format("{0}, {1}", v.DataTime, v.DataValue));
 File.WriteAllLines(@"c:\Test.csv", myValues);

これはIEnumerable<string>、匿名クラスを構築する代わりに、を構築するだけです。

ファイルへの書き込み以外にクエリ結果を使用しない場合は、このアプローチを使用します。中間の他のコードで匿名クラスを使用している場合、最初のコードを使用すると、そのコードを変更する必要がなくなります。

于 2012-06-14T20:02:37.847 に答える