Dapper.NETを使用してC#で変数にSQL結果を格納する方法

c# dapper sqlconnection

質問

私は私のプロジェクトで、 Listとこの作業良いSQL query結果を格納するための美しいツールでは、 を使用していSQL query

私は、データベースからレコードをフェッチし、その結果を変数に格納するためにSQL queryを書きました。私はdapperを使ってみましたが、エラーで立ち往生しました。私は対応するコードを貼り付けました。

例外: 'System.Collections.Generic.List`1 [Dapper.SqlMapper + DapperRow]タイプのオブジェクトをキャストして' System.IConvertible 'と入力できません。

try
{
  using(var connection = ...)
  {
   connection.Open();
   const string masterSelectQuery = "SELECT Id as [fileId], FileName as [fileName], Frequency as [frequency], Scheduled_Time as scheduledTime FROM MASTER_TABLE";
   masterTableList = connection.Query<MasterTableAttributes>(masterSelectQuery).ToList();//Working fine

   const string lastProcessedTimeQuery = "SELECT TOP 1 file_transfered_time as [lastProcessedTime] FROM PROCESS_LOGS ORDER BY file_transfered_time DESC";
   DateTime lastProcessedTime = Convert.ToDateTime(connection.Query(lastProcessedTimeQuery)); //Here it fails
  }    
}

このエラーを克服するために、 SQLCommandを次のように使用しSQLCommand

using (command = new SqlCommand(lastProcessedTimeQuery, connection))
{
  DateTime lastProcessedTime = (DateTime)command.ExecuteScalar();//working fine  
}

誰も私を案内してくれますか?

前もって感謝します。

受け入れられた回答

connection.Query(lastProcessedTimeQuery)は、個々にdynamic 一連行を返します。 file_transfered_timedatetimeであると仮定すると、ここでは2つの選択肢があります。

DateTime lastProcessedTime = connection.Query<DateTime>(
                 lastProcessedTimeQuery).Single();

非ジェネリックQuerydynamic行とどのように連動するかを示すには:

DateTime lastProcessedTime = connection.Query(
                 lastProcessedTimeQuery).Single().lastProcessedTime;

PROCESS_LOGSテーブルが空の場合は、 SingleOrDefaultを使用することをお勧めします。

DateTime? lastProcessedTime = connection.Query<DateTime?>(
                 lastProcessedTimeQuery).SingleOrDefault();

または:

var row = connection.Query(lastProcessedTimeQuery).SingleOrDefault();
DateTime? lastProcessedTime = null;
if(row != null) lastProcessedTime = row.lastProcessedTime;


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