Principales respuestas
error consulta linq

Pregunta
-
<!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} @font-face {font-family:"DejaVu Sans Mono"; mso-font-charset:0; mso-generic-font-family:modern; mso-font-pitch:auto; mso-font-signature:0 0 0 0 0 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; mso-hyphenate:none; font-size:12.0pt; font-family:"Times New Roman","serif"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:CA; mso-fareast-language:AR-SA;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:10.0pt; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt;} @page Section1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> Hola tengo esta consulta en linq donde hago un join i me funciona... el problema lo tengo si quiero cargar el campo correu el cual tengo valores nulos...
y me da error....
como puedo cargar solamente los valores noNULOS?
Dim vlocSQL = From vsQLrecor In My.Application.Ojcodi.vmemDataSet.santoral _
Join vsqlAmistat In My.Application.Ojcodi.vmemDataSet.amistats _
On vsqlAmistat.nom Equals vsQLrecor.nom _
Where (vsQLrecor.data.Month = Now.Month And _
(vsQLrecor.data.Day() - Now.Day) >= 0 And (vsQLrecor.data.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca) _
Or (vsqlAmistat.data_naixement.Month = Now.Month And _
(vsqlAmistat.data_naixement.Day() - Now.Day) >= 0 And (vsqlAmistat.data_naixement.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca)
For Each vlocSant_aniver In vlocSQL.ToList
nom = vlocSant_aniver.vsqlAmistat.nom
cognom = vlocSant_aniver.vsqlAmistat.cognom
data_naixement = vlocSant_aniver.vsqlAmistat.data_naixement
data_sant = vlocSant_aniver.vsQLrecor.data
'correu = vlocSant_aniver.vsqlAmistat.dades_electròniques (aqui me da el error)domingo, 30 de agosto de 2009 6:31
Respuestas
-
hola
una consulta dond ese encontraria la seccion Select en la consulta linq
o sea esta es tu consulta linq
Dim vlocSQL = From vsQLrecor In My.Application.Ojcodi.vmemDataSet.santoral _
Join vsqlAmistat In My.Application.Ojcodi.vmemDataSet.amistats _
On vsqlAmistat.nom Equals vsQLrecor.nom _
Where (vsQLrecor.data.Month = Now.Month And _
(vsQLrecor.data.Day() - Now.Day) >= 0 And (vsQLrecor.data.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca) _
Or (vsqlAmistat.data_naixement.Month = Now.Month And _
(vsqlAmistat.data_naixement.Day() - Now.Day) >= 0 And (vsqlAmistat.data_naixement.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca)
en esta como seleccionas el objetos que devolvera la consulta, o se aflta la parte del Select
aqui es lugo donde lo trabajas
For Each vlocSant_aniver In vlocSQL.ToList
nom = vlocSant_aniver.vsqlAmistat.nom
cognom = vlocSant_aniver.vsqlAmistat.cognom
data_naixement = vlocSant_aniver.vsqlAmistat.data_naixement
data_sant = vlocSant_aniver.vsQLrecor.data
correu = vlocSant_aniver.vsqlAmistat.dades_electròniques (aqui me da el error)
o entendi mal y el For Each es parte de la consulta linq
no deberia ser
Dim vlocSQL = From vsQLrecor In My.Application.Ojcodi.vmemDataSet.santoral _
Join vsqlAmistat In My.Application.Ojcodi.vmemDataSet.amistats _
On vsqlAmistat.nom Equals vsQLrecor.nom _
Where (vsQLrecor.data.Month = Now.Month And _
(vsQLrecor.data.Day() - Now.Day) >= 0 And (vsQLrecor.data.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca) _
Or (vsqlAmistat.data_naixement.Month = Now.Month And _
(vsqlAmistat.data_naixement.Day() - Now.Day) >= 0 And (vsqlAmistat.data_naixement.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca)
Select New {
nom = vlocSant_aniver.vsqlAmistat.nom,
cognom = vlocSant_aniver.vsqlAmistat.cognom,
data_naixement = vlocSant_aniver.vsqlAmistat.data_naixement,
data_sant = vlocSant_aniver.vsQLrecor.data,
correu = vlocSant_aniver.vsqlAmistat.dades_electròniques
}
lo que marque en negrita pienso es la parte que falta.
lo digo porque em guie de estos ejemplos:
Crear DataTable desde una consulta (LINQ to DataSet)
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Marcado como respuesta Spandau martes, 1 de septiembre de 2009 23:11
martes, 1 de septiembre de 2009 15:05 -
¿Al final de la consulta LINQ tienes una instrucción SELECT?
Por mucho que miro la consulta, yo no veo la instrucción SELECT, y si no hay instrucción SELECT, ¿cómo seleccionas los campos que deseas recuperar?
Tu código fuente es muy difícil de interpretar, debido a los nombres tan rebuscados y largos que utilizas como variables. No obstante te comento que, si el error lo obtienes al leer el valor de un campo concreto, tienes que verificar si su valor es NULL de la siguiente manera:
If vlocSant_aniver.vsqlAmistat.dades_electròniques Is DBNull.Value Then
correu = "NULL"
Else
correu = vlocSant_aniver.vsqlAmistat.dades_electròniques
End If
Insisto en lo de la instrucción SELECT, así como en los acentos de los nombres de las variables. Mejor será que los elimines.
Enrique Martínez [MS MVP - VB]- Marcado como respuesta Spandau martes, 1 de septiembre de 2009 22:48
martes, 1 de septiembre de 2009 15:08Moderador -
"Spandau" preguntó:
> como puedo cargar solamente los valores no NULOS?
En la cláusula WHERE de la consulta LINQ, tendrás que indicar que deseas recuperar aquellos registros cuyo campo «correu» no sea NULL:
' Recuperamos aquellos registros del objeto DataTable llamado ' Clientes, cuyo campo CodPostal no sea NULL. ' Dim query As IEnumerable(Of DataRow) = _ From rowClientes As DataRow In Clientes _ Where rowClientes.Item("CodPostal") IsNot DBNull.Value _ Select rowClientes
En el ejemplo, se comprende que la variable Clientes referencia a un objeto DataTable.
Adapta el ejemplo a tu consulta LINQ.
Un saludo
Enrique Martínez [MS MVP - VB]- Marcado como respuesta Enrique M. MontejoModerator domingo, 26 de junio de 2011 17:01
domingo, 30 de agosto de 2009 8:49Moderador -
> Public Property dades_electròniques() As String
> Get
> Try
> Return CType(Me(Me.tableamistats.dades_electròniquesColumn),String)
> Catch e As Global.System.InvalidCastException
> Throw New Global.System.Data.StrongTypingException("El valor de la columna
> 'dades electròniques' de la tabla 'amistats' es DBNull.", e)
> End Try
> End Get
> Set
> Me(Me.tableamistats.dades_electròniquesColumn) = value
> End Set
> End Property
Obtienes esa excepción cuando el valor Me.tableamistats.dades_electròniquesColumn no se puede convertir a String, y el bloque Catch está configurado para devolver la excepción al procedimiento llamador con la descripción «El valor de la columna 'dades electròniques' de la tabla 'amistats' es DBNull.»
Un valor NULL no se puede leer. Para evitar leer valores NULL, en mi anterior mensaje te indiqué lo que tenías que hacer.
Enrique Martínez [MS MVP - VB]- Marcado como respuesta Enrique M. MontejoModerator domingo, 26 de junio de 2011 17:02
miércoles, 2 de septiembre de 2009 8:03Moderador
Todas las respuestas
-
"Spandau" preguntó:
> como puedo cargar solamente los valores no NULOS?
En la cláusula WHERE de la consulta LINQ, tendrás que indicar que deseas recuperar aquellos registros cuyo campo «correu» no sea NULL:
' Recuperamos aquellos registros del objeto DataTable llamado ' Clientes, cuyo campo CodPostal no sea NULL. ' Dim query As IEnumerable(Of DataRow) = _ From rowClientes As DataRow In Clientes _ Where rowClientes.Item("CodPostal") IsNot DBNull.Value _ Select rowClientes
En el ejemplo, se comprende que la variable Clientes referencia a un objeto DataTable.
Adapta el ejemplo a tu consulta LINQ.
Un saludo
Enrique Martínez [MS MVP - VB]- Marcado como respuesta Enrique M. MontejoModerator domingo, 26 de junio de 2011 17:01
domingo, 30 de agosto de 2009 8:49Moderador -
gracias softjaen por tu rapida respuesta..
mis conocimientos en linq no son muy amplios... he estado buscando tutoriales en la red y no he encontrado mucha cosa....solamente he encontrado alguna pagina con ejemplos ..
en mi caso si le añado:
and dades_electròniques IsNot DBNull.Value
no me devolvera los registros que no tengan ningun valor en este campo...
quizas no conozca mucho el lenguaje linq... pero como hago que me devuelva todos los registros con las condiciones siguientes y me muestre el campo dades_electròniques
con o sin valor? lo que no entiendo de este caso que tengo la tabla en access(tengo pocos registros y access es más portable)... es que a valor predeterminado en este campo
tengo ="", por ello pensava que no me tendria que generar error...
Dim vlocSQL = From vsQLrecor In My.Application.Ojcodi.vmemDataSet.santoral _
Join vsqlAmistat In My.Application.Ojcodi.vmemDataSet.amistats _
On vsqlAmistat.nom Equals vsQLrecor.nom _
Where (vsQLrecor.data.Month = Now.Month And _
(vsQLrecor.data.Day() - Now.Day) >= 0 And (vsQLrecor.data.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca) _
Or (vsqlAmistat.data_naixement.Month = Now.Month And _
(vsqlAmistat.data_naixement.Day() - Now.Day) >= 0 And (vsqlAmistat.data_naixement.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca)
For Each vlocSant_aniver In vlocSQL.ToList
lunes, 31 de agosto de 2009 7:08 -
acabo de revisar mi primera pregunta y me doy cuenta que la escribi mal... perdon,
desearia que mi consulta me devolviese todos los registros con el campo dades_electròniques nulo y no nulo
lunes, 31 de agosto de 2009 7:11 -
La verdad es que leyendo tu mensaje, ya no sé si deseas recuperar los registros cuyo campo «dades_electròniques» sean nulos, sean no nulos, o recuperar todos, sean o no nulos. ¿?
Si deseas recuperar todos los registros, con independencia de que el campo sea o no NULL, en la cláusula WHERE no indiques
... Where dades_electròniques IsNot DBNull.Value ...
Que deseas recuperar aquellos que sean NULL:
... Where dades_electròniques Is DBNull.Value ...
Y si deseas recuperar aquellos que no sean NULL:
... Where dades_electròniques IsNot DBNull.Value ...
Te aconsejaría que no incluyas acentos en los nombres de los campos, porque lo único que te puede pasar es que, más tarde o más temprano, tengas problemas.
Enrique Martínez [MS MVP - VB]martes, 1 de septiembre de 2009 13:46Moderador -
Gracias SoftJaén por tu clara respuesta,
pero en el codigo primero no lo he incluido nada relacionado en el campo dades_electròniques,
pero cuando quiero cargar los valores si un valor contiene este campo null me genera error.... mi duda es,
que aparte de darle valor predeterminado ="", ahun me da error ... si hay alguna manera de hacer que al cargar des de el linq darle un valor para que no me de error....
gracias por adelantado...
martes, 1 de septiembre de 2009 14:11 -
Lo siento muchísimo, pero no me entero de nada. No sé a qué error te refieres, y como te he comentado antes, tampoco sé qué tipos de registros deseas recuperar.
Enrique Martínez [MS MVP - VB]martes, 1 de septiembre de 2009 14:18Moderador -
Perdona por mis poco claros mensajes...
si al codigo linq, quiero cargar el campo dades_electròniques me genera el error de la ultima linea... desearia cargarlo sea null o no....
Dim vlocSQL = From vsQLrecor In My.Application.Ojcodi.vmemDataSet.santoral _
Join vsqlAmistat In My.Application.Ojcodi.vmemDataSet.amistats _
On vsqlAmistat.nom Equals vsQLrecor.nom _
Where (vsQLrecor.data.Month = Now.Month And _
(vsQLrecor.data.Day() - Now.Day) >= 0 And (vsQLrecor.data.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca) _
Or (vsqlAmistat.data_naixement.Month = Now.Month And _
(vsqlAmistat.data_naixement.Day() - Now.Day) >= 0 And (vsqlAmistat.data_naixement.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca)
For Each vlocSant_aniver In vlocSQL.ToList
nom = vlocSant_aniver.vsqlAmistat.nom
cognom = vlocSant_aniver.vsqlAmistat.cognom
data_naixement = vlocSant_aniver.vsqlAmistat.data_naixement
data_sant = vlocSant_aniver.vsQLrecor.data
correu = vlocSant_aniver.vsqlAmistat.dades_electròniques (aqui me da el error)
error: Throw New Global.System.Data.StrongTypingException("El valor de la columna 'dades electròniques' de la tabla 'amistats' es DBNull.", e)
gracias
martes, 1 de septiembre de 2009 14:35 -
hola
una consulta dond ese encontraria la seccion Select en la consulta linq
o sea esta es tu consulta linq
Dim vlocSQL = From vsQLrecor In My.Application.Ojcodi.vmemDataSet.santoral _
Join vsqlAmistat In My.Application.Ojcodi.vmemDataSet.amistats _
On vsqlAmistat.nom Equals vsQLrecor.nom _
Where (vsQLrecor.data.Month = Now.Month And _
(vsQLrecor.data.Day() - Now.Day) >= 0 And (vsQLrecor.data.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca) _
Or (vsqlAmistat.data_naixement.Month = Now.Month And _
(vsqlAmistat.data_naixement.Day() - Now.Day) >= 0 And (vsqlAmistat.data_naixement.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca)
en esta como seleccionas el objetos que devolvera la consulta, o se aflta la parte del Select
aqui es lugo donde lo trabajas
For Each vlocSant_aniver In vlocSQL.ToList
nom = vlocSant_aniver.vsqlAmistat.nom
cognom = vlocSant_aniver.vsqlAmistat.cognom
data_naixement = vlocSant_aniver.vsqlAmistat.data_naixement
data_sant = vlocSant_aniver.vsQLrecor.data
correu = vlocSant_aniver.vsqlAmistat.dades_electròniques (aqui me da el error)
o entendi mal y el For Each es parte de la consulta linq
no deberia ser
Dim vlocSQL = From vsQLrecor In My.Application.Ojcodi.vmemDataSet.santoral _
Join vsqlAmistat In My.Application.Ojcodi.vmemDataSet.amistats _
On vsqlAmistat.nom Equals vsQLrecor.nom _
Where (vsQLrecor.data.Month = Now.Month And _
(vsQLrecor.data.Day() - Now.Day) >= 0 And (vsQLrecor.data.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca) _
Or (vsqlAmistat.data_naixement.Month = Now.Month And _
(vsqlAmistat.data_naixement.Day() - Now.Day) >= 0 And (vsqlAmistat.data_naixement.Day() - Now.Day) <= vloc_entrada_variable_condicion_cerca)
Select New {
nom = vlocSant_aniver.vsqlAmistat.nom,
cognom = vlocSant_aniver.vsqlAmistat.cognom,
data_naixement = vlocSant_aniver.vsqlAmistat.data_naixement,
data_sant = vlocSant_aniver.vsQLrecor.data,
correu = vlocSant_aniver.vsqlAmistat.dades_electròniques
}
lo que marque en negrita pienso es la parte que falta.
lo digo porque em guie de estos ejemplos:
Crear DataTable desde una consulta (LINQ to DataSet)
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Marcado como respuesta Spandau martes, 1 de septiembre de 2009 23:11
martes, 1 de septiembre de 2009 15:05 -
¿Al final de la consulta LINQ tienes una instrucción SELECT?
Por mucho que miro la consulta, yo no veo la instrucción SELECT, y si no hay instrucción SELECT, ¿cómo seleccionas los campos que deseas recuperar?
Tu código fuente es muy difícil de interpretar, debido a los nombres tan rebuscados y largos que utilizas como variables. No obstante te comento que, si el error lo obtienes al leer el valor de un campo concreto, tienes que verificar si su valor es NULL de la siguiente manera:
If vlocSant_aniver.vsqlAmistat.dades_electròniques Is DBNull.Value Then
correu = "NULL"
Else
correu = vlocSant_aniver.vsqlAmistat.dades_electròniques
End If
Insisto en lo de la instrucción SELECT, así como en los acentos de los nombres de las variables. Mejor será que los elimines.
Enrique Martínez [MS MVP - VB]- Marcado como respuesta Spandau martes, 1 de septiembre de 2009 22:48
martes, 1 de septiembre de 2009 15:08Moderador -
Gracias Softjaen por tu paciencia y Leandro Leandro Tuttini por tus aportaciones...
he añandido el codigo de Softjaen y no se porque todavia me genera el error global...cosa que no entiendo porque....
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute()> _
Public Property dades_electròniques() As String
Get
Try
Return CType(Me(Me.tableamistats.dades_electròniquesColumn),String)
Catch e As Global.System.InvalidCastException
Throw New Global.System.Data.StrongTypingException("El valor de la columna 'dades electròniques' de la tabla 'amistats' es DBNull.", e)
End Try
End Get
Set
Me(Me.tableamistats.dades_electròniquesColumn) = value
End Set
End Property
respecto al codigo de Ledandro tengo un error de sintaxis.... pero ya lo voy a arreglar
Teneis razon.... TODOS los ejemplos o caso todos de la red terminan con un SELECT (parecido al SQL) veo que tendre que cambiar de chip...
he finalizado un curso presencial de NET y todos los ejemplos de consultas el profe no se porque las finalizava con el for Each...... pero le funcionava..
Gracias
martes, 1 de septiembre de 2009 23:01 -
> Public Property dades_electròniques() As String
> Get
> Try
> Return CType(Me(Me.tableamistats.dades_electròniquesColumn),String)
> Catch e As Global.System.InvalidCastException
> Throw New Global.System.Data.StrongTypingException("El valor de la columna
> 'dades electròniques' de la tabla 'amistats' es DBNull.", e)
> End Try
> End Get
> Set
> Me(Me.tableamistats.dades_electròniquesColumn) = value
> End Set
> End Property
Obtienes esa excepción cuando el valor Me.tableamistats.dades_electròniquesColumn no se puede convertir a String, y el bloque Catch está configurado para devolver la excepción al procedimiento llamador con la descripción «El valor de la columna 'dades electròniques' de la tabla 'amistats' es DBNull.»
Un valor NULL no se puede leer. Para evitar leer valores NULL, en mi anterior mensaje te indiqué lo que tenías que hacer.
Enrique Martínez [MS MVP - VB]- Marcado como respuesta Enrique M. MontejoModerator domingo, 26 de junio de 2011 17:02
miércoles, 2 de septiembre de 2009 8:03Moderador -
Hola Spandau...
A mi hace poco me paso algo similar con eso...
lo que a mi me funciono fue, en el dataset designer,
selecciona el campo que te marca el error (dades electrònique) y ahi establece los valores en la propiedades asi
NullValue --> le asigne <Empty>
DefaultValue --> lo deje en blanco.
Ojala te sirva a ti tambien
saludos!
- Propuesto como respuesta arzamm viernes, 19 de octubre de 2012 20:28
viernes, 19 de octubre de 2012 20:27