LINQ指定的转换无效

时间:2012-08-14 14:23:07

标签: asp.net 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,则代码继续正常,但如果它与数据库中的对象实际匹配,则会出现此错误。

编辑(附加信息)

错误消息是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。

基本上如果它是'localhost'(不在db中)代码传递,但如果它匹配('pgande')则抛出此错误。

4 个答案:

答案 0 :(得分:1)

如果s.DSN无法投放到dsn,您将收到此错误消息。您可能需要提供转换。

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

我想你已经尝试了,但可能你需要施展dsn,而不是s.DSN?尝试使用链接“s => s.DSN == dsn.ToString()”。 这有帮助吗?

答案 3 :(得分:0)

我最终将表格放回我的数据上下文中,一切正常。显然有些东西在第一次被丢弃的桌子上腐败了。