2012-07-31 4 views
0

Problème correct que j'essaie de trier depuis toujours!Affichage des résultats d'une instruction SQL Select

J'essaie d'afficher le résultat d'une commande de sélection SQL et d'afficher cette information à ma vue. Je ne peux pas simplement utiliser EntityFramework, pas d'après ce que je peux voir de toute façon, pour faire la commande parce que j'apporte des données de 2 tables différentes et que je les affiche comme une seule, ceci est pour un rapport.

C'est la commande sql que j'ai besoin de lancer.

select FirstName, LastName, 
(select count(*) from Orders o where U.userID = o.CreatedByUserID and ProductID = 1) as ProductCount 
from Users U 
order by UserID 

Y a-t-il quelque chose que je puisse faire pour exécuter cette commande? Je serais prêt à essayer une méthode EntityFramwork si je ne peux pas exécuter le SQL directement.

Merci d'avance pour toute aide!

+0

Qu'est-ce que * ont * vous avez essayé et échoué? –

+0

oui. plusieurs fois!! –

+1

"Oui" n'est pas une réponse à "quoi". –

Répondre

1

Vous pouvez utiliser EF (ou une autre solution ORM). Il y a clairement une relation entre les commandes et les utilisateurs: U.userID = o.CreatedByUserID. Vous pouvez simplement récupérer les utilisateurs, puis accéder à user.Orders.Count pour obtenir la valeur "manquante".

0

En supposant CTX est votre contexte essayez

var q=from u in ctx.users 
     join x in ctx.orders.Where(y=>y.ProductID==1).GroupBy(y => y.CreatedByUserID) 
     on u.UserID equals x.Key into joined_orders 
from o in joined_orders.DefaultIfEmpty() 
select new { 
     FirstName=u.FirstName, 
     LastName=u.LastName, 
     Count=o.Count() 
     }; 

Cela suppose que vous n'avez pas des relations définies dans votre modèle, sinon vous pouvez simplement utiliser

var q=from u in ctx.users 
     select new { 
     FirstName=u.FirstName, 
     LastName=u.LastName, 
     Count=o.Count(x=>x.ProductID==1) 
     };