2009-06-09 7 views
2

Am nouveau à cette ici est mon T-SQLLINQ équivalent au code SQL

SELECT category.id, category.name,COUNT(job.id) AS countofjobs 
FROM category 
LEFT OUTER JOIN job ON category.id = job.categoryid AND job.active=1 
WHERE category.featured=1 
GROUP BY category.id, category.name 
ORDER BY category.name 

quel sera le LINQ équivalent au code SQL? Désolé, j'ai oublié de mentionner qu'il n'y a pas de relation avec la base de données, les tables n'ont aucune association définie dans db, c'est le problème principal, c'est vraiment un exemple de sql pour voir comment je peux écrire Link à SQL pour T-SQL qui nécessite: jointure externe gauche, nombre d'enregistrements de table jointure externe et le tri

+1

Avez-vous les associations entre le travail et la configuration de table de catégorie correctement dans votre fichier dbml? – jfar

Répondre

5
var result = dataContext.Categories 
        .Where(c => c.Featured) 
        .OrderBy(c => c.Name) 
        .Select(c => new { c.Id, 
            c.Name, 
            CountOfJobs = c.Jobs.Count(j => j.Active) }; 

Autre possibilité:

var result = from c in dataContext.Categories 
      where c.Featured 
      orderby c.Name 
      select new { c.Id, c.Name, CountOfJobs = c.Jobs.Count(j => j.Active) }; 
+0

Trop vieux pour changer de vote? Wha? Cette réponse est fausse maintenant que le questionneur a déclaré qu'il n'a aucune association dans son dbml. – jfar

+0

@jfar: Je préfère laisser la réponse telle quelle pour les futurs utilisateurs qui pourraient poser une question similaire, car il y a une autre réponse qui couvre l'autre cas. Et en passant, je ne pense pas que les réponses qui sont rendues obsolètes par une modification de question devraient être downvoted. Ils étaient corrects au moment où ils ont répondu. –

+0

Laissant la réponse est bien, mais il ne devrait pas être n ° 1, mon vote aurait aidé à changer cela et obtenir la bonne réponse sur le dessus. – jfar

1

Puisque vous n'avez pas les relations:

var result = from c in dataContext.Categories 
      where c.Featured 
      orderby c.Name 
      select new { 
       c.Id, 
       c.Name, 
       CountOfJobs = dataContext.Jobs.Count(j => j.categoryId == c.Id && j.Active) 
      };