2016-08-02 4 views
0

У меня есть функция, возвращающая список IEnumerable класса EncounterList.C# Xamarin Android sqlite-pcl database.Query не возвращает результатов

Если бы я сделать это таким образом, что не работает, никаких результатов нет:

Вариант А:

public IEnumerable<EncounterList> GetEncounters4User4Date(long uid, string ApptDate) 
     { 
      string strSQL = "SELECT encounters.rotation as EncounterID, encounters.encounterdatetime as ApptTime, patients.surname || ', ' || patients.title || ' ' || patients.forename AS PatientName "; 
      strSQL += "FROM encounters INNER JOIN patients ON encounters.patientid = patients.rotation LEFT OUTER JOIN consultlinkage on encounters.rotation = consultlinkage.encounterid "; 
      strSQL += "WHERE encounters.userid=? AND consultlinkage.encounterid IS NULL AND strftime('%Y-%m-%d',encounters.encounterdatetime) = '?' ORDER BY encounters.encounterdatetime"; 
      var results= database.Query<EncounterList>(strSQL, uid, ApptDate); 

      return results; 
     } 

Если бы я сделать это таким образом, это делает работу.

Вариант B:

public IEnumerable<EncounterList> GetEncounters4User4Date(long uid, string ApptDate) 
     { 
      string strSQL = "SELECT encounters.rotation as EncounterID, encounters.encounterdatetime as ApptTime, patients.surname || ', ' || patients.title || ' ' || patients.forename AS PatientName "; 
      strSQL += "FROM encounters INNER JOIN patients ON encounters.patientid = patients.rotation LEFT OUTER JOIN consultlinkage on encounters.rotation = consultlinkage.encounterid "; 
      strSQL += string.Format("WHERE encounters.userid={0} AND consultlinkage.encounterid IS NULL AND strftime('%Y-%m-%d',encounters.encounterdatetime) = '{1}' ORDER BY encounters.encounterdatetime", uid, ApptDate); 
      var results= database.Query<EncounterList>(strSQL); 

      return results; 
     } 

Может кто-нибудь объяснить мне, что это то, что я делаю неправильно в примере А? Я могу заставить его работать, если я использую string.format.

+1

Вы ** двойные кавычки ** ошибочны в первом. –

+0

Извинения. Исправлено это, чтобы включить отсутствующие котировки. –

+0

Вначале ничего, возможно, вам нужно разбить условие 'where' и проверить оба запроса. –

ответ

0

Итак, я, наконец, узнал, что я делаю неправильно. Я неправильно понял, как связаны параметры при вызове Resolver Query. Я предположил, что вам нужны одинарные кавычки вокруг второго параметра в версии A и что резольвер просто заменил? placeholder со значением второго параметра, но это не то, что происходит. Я обнаружил, что если я изменил строку с надписью:

strSQL += "WHERE encounters.userid=? AND consultlinkage.encounterid IS NULL AND strftime('%Y-%m-%d',encounters.encounterdatetime) = '?' ORDER BY encounters.encounterdatetime"; 

.... в версии А, чтобы:

strSQL += "WHERE encounters.userid=? AND consultlinkage.encounterid IS NULL AND strftime('%Y-%m-%d',encounters.encounterdatetime) = ? ORDER BY encounters.encounterdatetime"; 

IE Удалить одиночные кавычки вокруг параметра, то она работает просто отлично.

Смежные вопросы