0

次のコードがあります。

DateTime dt = (DateTime)rdr["DateFromSQLDB"];
genericclass.classpropertystring = dt.ToShortDateString();

これを1行にまとめるにはどうすればよいですか?

これがクラスです...

public class genericclass
{
    public string classpropertystring { get; set; }
}

そのままでもうまく機能しますが、次のようなものを使用できるようにしたいです。

genericclass.classpropertystring = (DateTime)rdr["DateFromSQLDB"].ToShortDateString();

ありがとう!

4

5 に答える 5

1

U はちょうど 2 つの括弧を欠いています:

genericclass.classpropertystring = ((DateTime)rdr["DateFromSQLDB"]).ToShortDateString();
于 2013-10-08T22:09:06.367 に答える
1

これはうまくいくはずです:

genericclass.classpropertystring = ((DateTime)rdr["DateFromSQLDB"]).ToShortDateString();

ただし、このようにするとコードが読みにくくなるため、質問にあるようにそのままにしておきます。

于 2013-10-08T22:09:07.333 に答える
1

最初にオブジェクトを修飾することを確認する必要があります。

genericclass.classpropertystring = ((DateTime)rdr["DateFromSQLDB"]).ToShortDateString();

キャストの周りに括弧を追加することで、内部のすべてを型として扱うことができますDateTime

私は@adrianbanksに同意しますが、最初の例の読みやすさを好みます。

于 2013-10-08T22:09:17.987 に答える
1

DbDataReader.GetDateTime代わりに使用してください:

genericclass.classpropertystring = rdr.GetDateTime(rdr.GetOrdinal("DateFromSQLDB")).ToShortDateString();
于 2013-10-08T22:09:29.017 に答える
0

なぜそれを凝縮したいのですか?読みにくくなります。また、返された rdr オブジェクトが null の場合はどうなるでしょうか? 爆破します。潜在的な悪い値を処理するために、もう少し堅牢なものを試してみます。より多くのコードが必要ですが、try catch ブロックをあちこちに配置しなくても、より多くの状況を処理できます。

public static void DoSomething()
    {
        using (var connection =new SqlConnection("constring"))
        {
            var command = new SqlCommand("myquery", connection);
            connection.Open();
            SqlDataReader rdr = command.ExecuteReader();
            while (rdr.Read())
            {
                var mc = new MyClass();
                var mydate = rdr["DateFromSQLDB"];
                if (mydate != null)
                {
                    DateTime date;
                    if (DateTime.TryParse(mydate.ToString(), out date))
                    {
                        mc.MyDateProperty = date.ToShortDateString();
                    }
                }
            }
        }
    }
于 2013-10-09T00:17:22.080 に答える