2012-08-14 65 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