2012-08-14 118 views
-2

沒有獲得有關此錯誤的更多信息,但我沒有在此特定代碼中使用任何投射,所以我很迷茫。LINQ指定的演員無效

 var dsn = Request.ServerVariables["HTTP_HOST"].Split('.').First(); 
     using (var ctx = new SharedDataContext("switchcurrent")) 
     { 
      var dbDsn = ctx.SiteObjects.FirstOrDefault(s => s.DSN == dsn); 

      if (dbDsn == null) 
      { 
       Session["CurrentDsn"] = "SwitchCurrent"; 
      } 
      else 
      { 
       Session["CurrentDsn"] = dbDsn.DSN; 
       Response.Redirect(String.Format("~/{0}", dbDsn.DefaultPage)); 
      } 
     } 

LINQ聲明是我得到錯誤的地方。如果語句返回null,代碼會繼續正常,但如果它與數據庫中的對象實際匹配,則會出現此錯誤。

EDIT(附加信息)

該錯誤消息是一個InvalidCastException 堆棧跟蹤:

at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)at System.Data.Linq.Table`1.System.Linq.IQueryProvider.Execute[TResult](Expression expression)at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source, Expression`1 predicate) at WebApplication1.Default.SetCurrentDsn() in C:\Code\dir\Default.aspx.cs:line 163 at WebApplication1.Default.Page_Load(Object sender, EventArgs e) in C:\Code\dir\Default.aspx.cs:line 32 at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean  includeStagesAfterAsyncPoint) 

SiteObject.Dsn是一個字符串。 dsn也是如此。

基本上,如果它是'本地主機'(不在數據庫中)代碼通過,但如果它的匹配('pgande')這個錯誤被拋出。

+0

什麼錯誤?這是運行時異常還是編譯器錯誤?如果它是運行時異常,請發佈有關此異常的信息,例如消息,異常類型和堆棧跟蹤(以及可能的內部異常)。如果是編譯錯誤,請顯示確切的錯誤信息en編譯器錯誤編號和確切的行。 – Steven 2012-08-14 14:26:28

+0

什麼是SiteObjects.DSN的類型? – Dave 2012-08-14 14:26:29

+0

DSN是什麼類型? – Jodrell 2012-08-14 14:27:32

回答

0

我最終把表放回到我的數據上下文中,並且一切正常。很顯然,第一次在那裏落下的桌子有些東西壞了。

1

如果s.DSN無法轉換爲dsn,則會出現此錯誤。您可能需要提供轉換。

0

試試這個:

var dbDsn = ctx.SiteObjects.FirstOrDefault(s => s.DSN.ToString() == dsn.ToString()); 
+0

沒有骰子,s.DSN已經是一個字符串 – mgaughan 2012-08-14 14:38:02

0

我想你已經盡力了,但可能是你需要投DSN,不是s.DSN?嘗試鏈接「s => s.DSN == dsn.ToString()」。 這幫忙嗎?

+0

沒有區別,dsn絕對是一個字符串。這就是爲什麼這麼難,'localhost'從查詢中返回null並且不會破壞代碼,但'pgande'不應該從查詢返回null,這正在打破。 – mgaughan 2012-08-14 15:01:19