2010-03-12 55 views
5

我尝试做以下...的LINQ to SQL - 指定的转换是无效的 - 的SingleOrDefault()

Request request = (
    from r in db.Requests 
    where r.Status == "Processing" && r.Locked == false 
    select r 
).SingleOrDefault(); 

它抛出以下异常...

Message: 
Specified cast is not valid. 

StackTrace: 
    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.DataQuery`1.System.Linq.IQueryProvider.Execute[S](Expression expression) 
    at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source) 
    at GDRequestProcessor.Worker.GetNextRequest() 

任何人都可以帮助我吗? 在此先感谢!


模式的详细信息可以在下面找到...

[Table(Name="dbo.Requests")] 
public partial class Request : INotifyPropertyChanging, INotifyPropertyChanged 
{ 

    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty); 

    private int _RequestId; 

    private string _LoanNumber; 

    private string _ClientCode; 

    private int _RequestTypeId; 

    private bool _HasParameters; 

    private string _Status; 

    private bool _Locked; 

    private string _ErrorMessage; 

    private int _ReferenceId; 

    private EntitySet<RequestParameter> _RequestParameters; 

    private EntityRef<RequestType> _RequestType; 

#region Extensibility Method Definitions 
partial void OnLoaded(); 
partial void OnValidate(System.Data.Linq.ChangeAction action); 
partial void OnCreated(); 
partial void OnRequestIdChanging(int value); 
partial void OnRequestIdChanged(); 
partial void OnLoanNumberChanging(string value); 
partial void OnLoanNumberChanged(); 
partial void OnClientCodeChanging(string value); 
partial void OnClientCodeChanged(); 
partial void OnRequestTypeIdChanging(int value); 
partial void OnRequestTypeIdChanged(); 
partial void OnHasParametersChanging(bool value); 
partial void OnHasParametersChanged(); 
partial void OnStatusChanging(string value); 
partial void OnStatusChanged(); 
partial void OnLockedChanging(bool value); 
partial void OnLockedChanged(); 
partial void OnErrorMessageChanging(string value); 
partial void OnErrorMessageChanged(); 
partial void OnReferenceIdChanging(int value); 
partial void OnReferenceIdChanged(); 
#endregion 

    public Request() 
    { 
     this._RequestParameters = new EntitySet<RequestParameter>(new Action<RequestParameter>(this.attach_RequestParameters), new Action<RequestParameter>(this.detach_RequestParameters)); 
     this._RequestType = default(EntityRef<RequestType>); 
     OnCreated(); 
    } 

    [Column(Storage="_RequestId", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)] 
    public int RequestId 
    { 
     get 
     { 
      return this._RequestId; 
     } 
     set 
     { 
      if ((this._RequestId != value)) 
      { 
       this.OnRequestIdChanging(value); 
       this.SendPropertyChanging(); 
       this._RequestId = value; 
       this.SendPropertyChanged("RequestId"); 
       this.OnRequestIdChanged(); 
      } 
     } 
    } 

    [Column(Storage="_LoanNumber", DbType="VarChar(50) NOT NULL", CanBeNull=false)] 
    public string LoanNumber 
    { 
     get 
     { 
      return this._LoanNumber; 
     } 
     set 
     { 
      if ((this._LoanNumber != value)) 
      { 
       this.OnLoanNumberChanging(value); 
       this.SendPropertyChanging(); 
       this._LoanNumber = value; 
       this.SendPropertyChanged("LoanNumber"); 
       this.OnLoanNumberChanged(); 
      } 
     } 
    } 

    [Column(Storage="_ClientCode", DbType="VarChar(50) NOT NULL", CanBeNull=false)] 
    public string ClientCode 
    { 
     get 
     { 
      return this._ClientCode; 
     } 
     set 
     { 
      if ((this._ClientCode != value)) 
      { 
       this.OnClientCodeChanging(value); 
       this.SendPropertyChanging(); 
       this._ClientCode = value; 
       this.SendPropertyChanged("ClientCode"); 
       this.OnClientCodeChanged(); 
      } 
     } 
    } 

    [Column(Storage="_RequestTypeId", DbType="Int NOT NULL")] 
    public int RequestTypeId 
    { 
     get 
     { 
      return this._RequestTypeId; 
     } 
     set 
     { 
      if ((this._RequestTypeId != value)) 
      { 
       if (this._RequestType.HasLoadedOrAssignedValue) 
       { 
        throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException(); 
       } 
       this.OnRequestTypeIdChanging(value); 
       this.SendPropertyChanging(); 
       this._RequestTypeId = value; 
       this.SendPropertyChanged("RequestTypeId"); 
       this.OnRequestTypeIdChanged(); 
      } 
     } 
    } 

    [Column(Storage="_HasParameters", DbType="Bit NOT NULL")] 
    public bool HasParameters 
    { 
     get 
     { 
      return this._HasParameters; 
     } 
     set 
     { 
      if ((this._HasParameters != value)) 
      { 
       this.OnHasParametersChanging(value); 
       this.SendPropertyChanging(); 
       this._HasParameters = value; 
       this.SendPropertyChanged("HasParameters"); 
       this.OnHasParametersChanged(); 
      } 
     } 
    } 

    [Column(Storage="_Status", DbType="VarChar(50) NOT NULL", CanBeNull=false)] 
    public string Status 
    { 
     get 
     { 
      return this._Status; 
     } 
     set 
     { 
      if ((this._Status != value)) 
      { 
       this.OnStatusChanging(value); 
       this.SendPropertyChanging(); 
       this._Status = value; 
       this.SendPropertyChanged("Status"); 
       this.OnStatusChanged(); 
      } 
     } 
    } 

    [Column(Storage="_Locked", DbType="Bit NOT NULL")] 
    public bool Locked 
    { 
     get 
     { 
      return this._Locked; 
     } 
     set 
     { 
      if ((this._Locked != value)) 
      { 
       this.OnLockedChanging(value); 
       this.SendPropertyChanging(); 
       this._Locked = value; 
       this.SendPropertyChanged("Locked"); 
       this.OnLockedChanged(); 
      } 
     } 
    } 

    [Column(Storage="_ErrorMessage", DbType="VarChar(255)")] 
    public string ErrorMessage 
    { 
     get 
     { 
      return this._ErrorMessage; 
     } 
     set 
     { 
      if ((this._ErrorMessage != value)) 
      { 
       this.OnErrorMessageChanging(value); 
       this.SendPropertyChanging(); 
       this._ErrorMessage = value; 
       this.SendPropertyChanged("ErrorMessage"); 
       this.OnErrorMessageChanged(); 
      } 
     } 
    } 

    [Column(Storage="_ReferenceId", DbType="Int NOT NULL")] 
    public int ReferenceId 
    { 
     get 
     { 
      return this._ReferenceId; 
     } 
     set 
     { 
      if ((this._ReferenceId != value)) 
      { 
       this.OnReferenceIdChanging(value); 
       this.SendPropertyChanging(); 
       this._ReferenceId = value; 
       this.SendPropertyChanged("ReferenceId"); 
       this.OnReferenceIdChanged(); 
      } 
     } 
    } 
+1

这通常发生在C#对象上的一个或多个属性的类型与列的类型不匹配时。你能发布Request表的模式和Request类的属性类型吗? – 2010-03-12 22:12:22

+0

请求类型是什么?如果你使用var请求怎么办? SingleOrDefault的返回类型是什么? – 2010-03-12 21:56:14

+0

请求反映在数据库表中的记录请求... 我试着用下面的代码和stil得到错误... var query =(from r in db.Requests where r.Status.Equals(“Processing” )&& r.Locked.Equals(false)select r).SingleOrDefault(); SingleOrDefault的返回类型是请求 – NullReference 2010-03-12 22:04:08

回答

0

你应该写:.SingleOrDefault<Request>()

Request request = (
         from r in db.Requests 
         where r.Status == "Processing" && r.Locked == false 
         select r 
       ) 
        .SingleOrDefault<Request>(); 
9

您需要确保您的表架构符合您的.dbml图和相关属性。

也许最简单的方法是从dbml图中删除问题表。然后,从您的服务器资源管理器中,将其拖回图表。

注意:这并不总是适用于视图。有时,您必须在将视图重新添加到DBML之前,从SSMS运行exec sp_refreshview MyViewName

+1

这种方法为我工作,谢谢 - 节省了大量的时间。一旦我将新表放入与当前数据库匹配的DBML中,我将* .dbml文件中的表条目与新条目进行比较以找出差异。 Atom与Split Diff包给了我确切的细节。 – Michael12345 2016-07-04 01:30:50

0

只需从您的dbml文件中删除相关表并重新添加它。 如果这没有奏效,请尝试从dbml文件中删除关联。