title: Subsonic 3 ActiveRecord Delete/Destroy throwing strange exception
body: <p>I've a simple table with a primary key (Identity) and few <code>varchar</code> type columns. I try to delete/destroy a record with given primary key using following syntax:</p>
  
  <p><code>SS3Test.DAL.TestClass.Destroy(x =&gt; x.TestId == _testId);</code></p>
  
  <p>but when it is called I get following Exception:</p>
  
  <p><code>Failed to convert parameter value from a Func</code>&#96;<code>2 to a Int32.</code></p>
  
  <p>The stack trace is as follow:</p>
  
  <pre>
  System.InvalidOperationException was unhandled
    Message="Failed to convert parameter value from a Func`2 to a Int32."
    Source="SubSonic.Core"
    StackTrace:
         at SubSonic.Query.SqlQuery.Execute()
         at SubSonic.Repository.SubSonicRepository`1.Delete(Object key, IDataProvider provider)
         at SubSonic.Repository.SubSonicRepository`1.Delete(Object key)
         at SS3Test.DAL.TestClass.Destroy(Func`2 expression) in E:\temp\SS3TEst\SS3Test.DAL\ActiveRecord.cs:line 2149
         at SS3Test.Model.TestClass.Delete(Int32 warrantyId, Boolean destroy) in E:\temp\SS3TEst\SS3Test.Model\TestClass.cs:line 84
         at SS3Test.GUI.FrmTestClass.btnDelete_Click(Object sender, EventArgs e) in E:\temp\SS3TEst\SS3Test.GUI\FrmTestClass.cs:line 72
         at System.Windows.Forms.Control.OnClick(EventArgs e)
         at System.Windows.Forms.Button.OnClick(EventArgs e)
         at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
         at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
         at System.Windows.Forms.Control.WndProc(Message& m)
         at System.Windows.Forms.ButtonBase.WndProc(Message& m)
         at System.Windows.Forms.Button.WndProc(Message& m)
         at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
         at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
         at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
         at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
         at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
         at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
         at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
         at System.Windows.Forms.Application.Run(Form mainForm)
         at SS3Test.GUI.Program.Main() in E:\temp\SS3TEst\SS3Test.GUI\Program.cs:line 21
         at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
         at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
         at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
         at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
         at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
         at System.Threading.ThreadHelper.ThreadStart()
    InnerException: System.InvalidCastException
         Message="Failed to convert parameter value from a Func`2 to a Int32."
         Source="System.Data"
         StackTrace:
              at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType)
              at System.Data.SqlClient.SqlParameter.GetCoercedValue()
              at System.Data.SqlClient.SqlParameter.Validate(Int32 index, Boolean isCommandProc)
              at System.Data.SqlClient.SqlCommand.BuildParamList(TdsParser parser, SqlParameterCollection parameters)
              at System.Data.SqlClient.SqlCommand.BuildExecuteSql(CommandBehavior behavior, String commandText, SqlParameterCollection parameters, _SqlRPC& rpc)
              at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
              at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
              at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
              at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
              at SubSonic.DataProviders.DbDataProvider.ExecuteQuery(QueryCommand qry)
              at SubSonic.Query.SqlQuery.Execute()
         InnerException: System.InvalidCastException
              Message="Object must implement IConvertible."
              Source="mscorlib"
              StackTrace:
                   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
                   at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType)
  </pre>
  
  <p>PS:- I've got a workaround from this answer, namely to get the object with given key from db and then calling delete on it. It works but I want to know why I'm getting this exception. Also I'm using SS 3.0.3 (downloaded today (26Jan2K10)).</p>