Linq Join?

20/01/2009 - 10:03 von Frank Bergmann | Report spam
Hallo,

ich beschàftige mich grade mit Linq und habe ein Problem mit einen Join.
Ich habe zwei Tabellen T_Model und T_Hersteller in T_Model der Schüssel
für T-Hersteller.
Ich möchte das ich das Feld Namen von T_Model erhalte und über den schüssel
das Feld mit den Namen des Herstellers.

Ich habe beide Tabellen einfach auf den dbml Desingner gezogen.

Mein Beispiel funktioniert nicht weil ich das noch nicht richtig Verstanden
haben.

Dim model = From mo In ksdb.T_Model _
Join her In ksdb.T_Hersteller _
On mo.T_HerstellerID Equals her.T_HerstellerID _
Where SqlMethods.Like(mo.NAME, SText) _
Select mo, her

For Each mo As T_Model In model
Dim lvItem As New ListViewItem(mo.NAME)
lvItem.SubItems.Add(mo.T_HerstellerID)
lvItem.Tag = mo.T_ModelID
Me.lvModel.Items.Add(lvItem)
Next


Danke für Eure Hilfe.

Frank Bergmann
 

Lesen sie die antworten

#1 Elmar Boye
20/01/2009 - 16:36 | Warnen spam
Hallo Frank,

Frank Bergmann schrieb:
ich beschàftige mich grade mit Linq und habe ein Problem mit einen Join.
Ich habe zwei Tabellen T_Model und T_Hersteller in T_Model der Schüssel
für T-Hersteller.
Ich möchte das ich das Feld Namen von T_Model erhalte und über den schüssel
das Feld mit den Namen des Herstellers.



Beim Entity Framework werden die Verknüpfungen über Abfragepfade
dargestellt, z. B.:
<URL:http://msdn.microsoft.com/de-de/lib...9.aspx>

Zu beachten ist dabei insbesondere, die verknüpften Instanzen
via Include mit zu laden, denn automatisch geschieht das (leider)
nicht.

Ich habe beide Tabellen einfach auf den dbml Desingner gezogen.
Dim model = From mo In ksdb.T_Model _
Join her In ksdb.T_Hersteller _
On mo.T_HerstellerID Equals her.T_HerstellerID _
Where SqlMethods.Like(mo.NAME, SText) _
Select mo, her



Eine Abfrage für die beiden untenstehende SQL Tabellen könnte
wie folgt so aussehen:

Public Sub ModelleByName(ByVal modellName As String)
Using context As New HerstellerModellEntities
Dim query = From modell In context.T_Modell _
.Include("T_Hersteller") _
Where modell.Name = modellName _
Select modell

For Each value In query
Console.WriteLine("Modell: '{0}' ({1}), Hersteller: '{2}' ({3})", _
value.Name, value.ModellID, _
value.T_Hersteller.HerstellerID, value.T_Hersteller.HerstellerID)
Next
End Using
End Sub

Dabei wird die Beziehung vom Modell zum Hersteller über den Navigationspfad
direkt aufgelöst.

Gruß Elmar


CREATE TABLE dbo.T_Hersteller
(
HerstellerID int NOT NULL
CONSTRAINT PK_Hersteller PRIMARY KEY,
Name nvarchar(40) NOT NULL
)
GO
CREATE TABLE dbo.T_Modell
(
ModellID int NOT NULL
CONSTRAINT PK_Model PRIMARY KEY,
Name nvarchar(40) NOT NULL,

HerstellerID int NOT NULL
CONSTRAINT FK_Model_Hersteller FOREIGN KEY
REFERENCES dbo.T_Hersteller (HerstellerID)
)
GO

INSERT INTO T_Hersteller VALUES(1000, N'Hersteller 1000')
INSERT INTO T_Hersteller VALUES(2000, N'Hersteller 2000')
INSERT INTO T_Hersteller VALUES(3000, N'Hersteller 3000')


INSERT INTO T_Modell VALUES(1001, N'Modell 1001', 1000)
INSERT INTO T_Modell VALUES(1002, N'Modell 1002', 1000)
INSERT INTO T_Modell VALUES(2001, N'Modell 2001', 2000)
GO

Ähnliche fragen