2010-03-12 29 views
5

que estoy tratando de hacer lo siguiente ...LINQ to SQL - La conversión especificada no es válida - SingleOrDefault()

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

Se está lanzando la siguiente excepción ...

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() 

¿Alguien me puede ayudar? ¡Gracias de antemano!


detalles de esquema pueden encontrar a continuación ...

[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

Esto generalmente sucede cuando el tipo de una o más de las propiedades en el objeto C# no coincide con el tipo de la columna. ¿puede publicar el esquema para la tabla de Solicitud y los tipos de las propiedades en la clase de Solicitud? –

+0

¿Cuál es el tipo de Solicitud? ¿Qué pasa si usa var request? ¿Cuál es el tipo de devolución de SingleOrDefault? –

+0

La solicitud refleja un registro en la tabla de la base de datos Solicitudes ... He intentado utilizar el siguiente código y todavía tengo el error ... var query = (de r en db.Requests donde r.Status.Equals ("Processing")) && r.Locked.Equals (falso) select r) .SingleOrDefault(); tipo de devolución de SingleOrDefault es Request – NullReference

Respuesta

0

debe escribir: .SingleOrDefault<Request>().

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

Debe asegurarse de que el esquema de la tabla coincida con el diagrama .dbml y las propiedades asociadas.

Quizás la forma más sencilla de hacerlo sea eliminar la tabla en cuestión de su diagrama dbml. Luego, desde su explorador de servidor, arrástrelo de vuelta al diagrama.

Nota: Esto no siempre funcionará con las vistas. A veces, debe ejecutar exec sp_refreshview MyViewName desde SSMS antes de volver a agregar su vista al DBML.

+1

Este enfoque funcionó para mí, gracias, ahorró mucho tiempo. Una vez que dejé caer la nueva tabla en el DBML que coincide con mi base de datos actual, comparé la entrada de la tabla en el archivo * .dbml con la nueva para encontrar las diferencias. Atom con el paquete Split Diff me dio los detalles exactos. – Michael12345

0

Simplemente elimine la tabla correspondiente de su archivo dbml y vuelva a agregarla. si esto no funcionó, intente eliminar las asociaciones del archivo dbml.

Cuestiones relacionadas