2009-07-17 5 views
1

J'ai un problème en essayant de faire un couple de choses avec linq joint ... actuellement j'ai un groupe dans linq qui donne deux colonnes, fondamentalement un nombre de billets par emplacement. Eh bien maintenant j'essaye d'ajouter une jointure qui se joindra aux colonnes ticketID de deux tables différentes Tickets et Commentaires.Linq Rejoindre la Question

Je fais un sacré coup de temps à essayer de convertir la jointure sql en Linq, moins seule à fusionner cela dans mon compte linq total de départ ... quelqu'un aide s'il vous plaît!

déclaration originale Linq:

From p In NewTickets _ 
Where p.TDate > "06/01/2009 12:00:00AM" And p.TDate < "07/01/2009 12:00:00PM" _ 
       Group p By p.LocationID _ 
       Into Count() _ 
       Select _ 
       LocationID, _ 
       NoOfTickets = Count _ 
       Order By NoOfTickets Descending 

besoin fusionné Inscris INTO Linq:

SELECT * 
FROM NewTickets as p 
LEFT OUTER JOIN NewComments AS c ON p.TicketID = c.TicketID 
WHERE (p.TDate > '06/01/2009 12:00:00AM') And (p.TDate < '07/01/2009 12:00:00PM') 
AND c.Comment Like '%ali%' 

MERCI DE VOTRE CONFIANCE!

Répondre

1

Si vous ajoutez une relation dans le concepteur linq to sql entre NewTickets et NewComments, des propriétés seront créées sur ces classes pour naviguer.

Les requêtes utilisant ces propriétés se traduiront automatiquement par la jointure. Par exemple:

from t in db.NewTickets 
where t.NewComments.Any(nc => nc.Comment.Contains("ali")) 
group t by t.LocationID into g 
select new {LocationID = g.Key, NoOfTickets = g.Count()} into x 
order x by x.NoOfTickets descending 
select x; 

Excuses pour les exemples de code C#.

En outre, je tiens à souligner que la jointure gauche dans votre sql est discutable - les tickets qui n'ont pas de commentaires seront supprimés par les critères d'ali. Une jointure interne fera l'affaire.

+0

Merci encore ... I « a répondu » ma question parce que je voulais assez d'espace et de style pour le vb Traduire. Merci encore!!! – wali

0

Ça a été ... pour la plupart ... Je vais devoir attaquer cela d'une manière différente car maintenant je reçois un compte qui apparemment des commentaires comme mon total a gonflé de moins de 200 à Presque 1300 ... chaque billet aura en moyenne environ 5 commentaires donc c'est pourquoi je suppose que ce n'est que du tir de la hanche ...

Merci David et pas de problème avec le C# (autant que j'ai traduit , vous pensez que je l'utiliserais maintenant).

Pour toute personne utilisant VB qui voudrait voir la même chose dans VB, ici vous allez:

Dim q = From e In db.NewTickets _ 
       Where e.NewComments.Any(Function(nc) nc.Comment.Contains("ali")) _ 
       Group e By e.LocationID _ 
        Into Count() _ 
        Select _ 
        LocationID, _ 
        NoOfTickets = Count _ 
        Order By NoOfTickets Descending 
1

Quelque chose comme ça

var movies = NewTickets.Join(NewComments, x => x.TicketID, y => y.TicketID, (x, y) => x).ToList();