Dapperを使うことを学ぶ:throws Invalid cast error

c# dapper

質問

VS2013 C#ウィンドウフォーム。私はDapperを勉強しています。これは私の1stショットです:私は簡単なクラスを持っています:

 public class R
 {
     public int RID   { get; set; }
     public int RType { get; set; }
     public string CC { get; set; }
     public string RI { get; set; }
     .
     .
     .
}

    private void _setR(string rID)
    {            
        int r_ID = Convert.ToInt16(requestID);
        MY_R = new R();

        SqlConnection c = new SqlConnection(Connection string);
        c.Open();
        var v= c.Query<R>("select RID, RType, CC, RI, .,.,., " +
                                          "from Db_View_R where RID=@r_ID", 
                                          new { @r_ID = r_ID }) ;
        c.Close();            
        MY_R = (R)v ; <--------- Invalid cast error here
    }

クエリは単純です:ビューからいくつかの列。 1行だけを返します。私はここで何が欠けているか分からない。前もって感謝します

受け入れられた回答

拡張メソッドQuery<T>IEnumerable<T>返します。したがって、タイプT変数にIEnumerable<T>型の値を割り当てることはできません。シーケンスからアイテムを1つだけ取る必要があります:

MY_R = v.FirstOrDefault(); // or First, Single, SingleOrDefault

実際にコードの名前を変更すると、次のようになります。

var sql = "SELECT RID, RType, CC, RI FROM Db_View_R where RID = @id";

using(var conn = new SqlConnection(ConnectionString))
{
     MY_R = conn.Query<R>(sql, new { id = Convert.ToInt16(requestID) })
                .FirstOrDefault();
}

私はまだRような名前は好きではありませんが(おそらくRequestはずですが)、はるかに読みやすく安全です(ステートメントを使用しusing接続の使用を包むべきです)。


人気のある回答

SingleOrDefault()を使用する

var v= c.Query<R>("select RID, RType, CC, RI, .,.,., " +
                                          "from Db_View_R where RID=@r_ID", 
                                          new { @r_ID = r_ID }).SingleOrDefault();


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow