Brauche mal Nachhilfe in LINQ

30/04/2008 - 13:49 von Ingo Manthey | Report spam
HalloNG,

ich habe zwei Tabellen,
PRODPLANUNG und PRODLAGER
wobei die PRODLAGER auf die PRODPLANUNG verweißt.

var aQuery = from lager in prodLager
let p = lager.PRODPLANUNG
where lager.FERTIG == false
where p.FERTIG == null &&
p.ARTIKEL.FIRMENID.FIRMENID == 1
select new {lager.Oid, prodktId = p.Oid,
lager.ARTIKEL, lager.MENGE };

foreach (var item in aQuery)
{
int lagerOid = item.Oid;
int prodOid = item.prodktId;
FK_ARTIKEL artikel2 = item.ARTIKEL;
decimal menge = item.MENGE;
}

In der foreach Anweisung bekomme ich die Exception ArgumentOutOfRange. Was
ist falsch???

Danke Ingo
 

Lesen sie die antworten

#1 Peter Fleischer
01/05/2008 - 08:20 | Warnen spam
"Ingo Manthey" schrieb im Newsbeitrag
news:

ich habe zwei Tabellen,
PRODPLANUNG und PRODLAGER
wobei die PRODLAGER auf die PRODPLANUNG verweißt.

var aQuery = from lager in prodLager
let p = lager.PRODPLANUNG
where lager.FERTIG == false
where p.FERTIG == null &&
p.ARTIKEL.FIRMENID.FIRMENID == 1
select new {lager.Oid, prodktId = p.Oid,
lager.ARTIKEL, lager.MENGE };

foreach (var item in aQuery)
{
int lagerOid = item.Oid;
int prodOid = item.prodktId;
FK_ARTIKEL artikel2 = item.ARTIKEL;
decimal menge = item.MENGE;
}

In der foreach Anweisung bekomme ich die Exception ArgumentOutOfRange.
Was ist falsch???



Hi Ingo,
ich habe das Szenario mal mit VB9 nachgestellt. Es funktioniert, wenn die
Daten konsistent sind. Wenn die Where-Bedingung wegen fehlender in Beziehung
stehender Daten nicht geprüft werden kann, dann kracht foreach. Das wird bei
dir vermutlich der Fall sein.

Option Infer On
Option Strict On

Module Module1

Sub Main()

Dim prodLager As New List(Of LagerItem)
With prodLager
.Add(New LagerItem With {.Oid = 1, .prodktId = 2, _
.ARTIKEL = New FK_ARTIKEL, .MENGE = 55, .FERTIG = True, _
.PRODPLANUNG = New PlanungItem With {.Oid = 11, _
.ARTIKEL = New clsARTIKEL With { _
.FIRMENID = New clsFirma With {.FIRMENID = 1}}}})
.Add(New LagerItem With {.Oid = 2, .prodktId = 2, _
.ARTIKEL = New FK_ARTIKEL, .MENGE = 66, .FERTIG = False, _
.PRODPLANUNG = New PlanungItem With {.Oid = 11, _
.ARTIKEL = New clsARTIKEL With { _
.FIRMENID = New clsFirma With {.FIRMENID = 1}}}})
.Add(New LagerItem With {.Oid = 4, .prodktId = 2, _
.ARTIKEL = New FK_ARTIKEL, .MENGE = 77, .FERTIG = True, _
.PRODPLANUNG = New PlanungItem With {.Oid = 11, _
.ARTIKEL = New clsARTIKEL With { _
.FIRMENID = New clsFirma With {.FIRMENID = 1}}}})
End With

Dim prodPlanung As New List(Of PlanungItem)


Dim aQuery = From lager In prodLager _
Let p = lager.PRODPLANUNG _
Where lager.FERTIG = False _
Where p.FERTIG Is Nothing And p.ARTIKEL.FIRMENID.FIRMENID = 1 _
Select lager.Oid, prodktId = p.Oid, lager.ARTIKEL, lager.MENGE


For Each item In aQuery
Console.Out.WriteLine("{0} {1} {2} {3}", _
item.Oid, item.prodktId, item.ARTIKEL, item.MENGE)
Dim lagerOid As Integer = item.Oid
Dim prodOid As Integer = item.prodktId
Dim artikel2 As FK_ARTIKEL = item.ARTIKEL
Dim menge As Decimal = item.MENGE
Next

Console.ReadLine()
End Sub

End Module

Public Class LagerItem
Private _Oid As Integer
Public Property Oid() As Integer
Get
Return _Oid
End Get
Set(ByVal value As Integer)
_Oid = value
End Set
End Property
Private _prodktId As Integer
Public Property prodktId() As Integer
Get
Return _prodktId
End Get
Set(ByVal value As Integer)
_prodktId = value
End Set
End Property
Public _ARTIKEL As FK_ARTIKEL
Public Property ARTIKEL() As FK_ARTIKEL
Get
Return _ARTIKEL
End Get
Set(ByVal value As FK_ARTIKEL)
_ARTIKEL = value
End Set
End Property
Private _MENGE As Decimal
Public Property MENGE() As Decimal
Get
Return _MENGE
End Get
Set(ByVal value As Decimal)
_MENGE = value
End Set
End Property
Private _PRODPLANUNG As PlanungItem
Public Property PRODPLANUNG() As PlanungItem
Get
Return _PRODPLANUNG
End Get
Set(ByVal value As PlanungItem)
_PRODPLANUNG = value
End Set
End Property
Private _FERTIG As Boolean
Public Property FERTIG() As Boolean
Get
Return _FERTIG
End Get
Set(ByVal value As Boolean)
_FERTIG = value
End Set
End Property
End Class

Public Class FK_ARTIKEL
Public Overrides Function ToString() As String
Return "Artikel"
End Function
End Class

Public Class PlanungItem
Private _Oid As Integer
Public Property Oid() As Integer
Get
Return _Oid
End Get
Set(ByVal value As Integer)
_Oid = value
End Set
End Property
Private _FERTIG As Object
Public Property FERTIG() As Object
Get
Return _FERTIG
End Get
Set(ByVal value As Object)
_FERTIG = value
End Set
End Property
Private _ARTIKEL As clsARTIKEL
Public Property ARTIKEL() As clsARTIKEL
Get
Return _ARTIKEL
End Get
Set(ByVal value As clsARTIKEL)
_ARTIKEL = value
End Set
End Property
End Class

Public Class clsARTIKEL
Private _FIRMENID As clsFirma
Public Property FIRMENID() As clsFirma
Get
Return _FIRMENID
End Get
Set(ByVal value As clsFirma)
_FIRMENID = value
End Set
End Property
End Class

Public Class clsFirma
Private _FIRMENID As Integer
Public Property FIRMENID() As Integer
Get
Return _FIRMENID
End Get
Set(ByVal value As Integer)
_FIRMENID = value
End Set
End Property
End Class

Viele Gruesse

Peter

Ähnliche fragen