2009-05-15 7 views
0

Quelqu'un pourrait-il montrer ma façon d'écrire requête LINQ to SQL pour recherche de banlieues qui ont au moins 1 lieu dans l'état spécifiqueLINQ to groupe sql en ayant

Lieu

SuburbID 
SuburbName 
StateName 

Venue

VenueID 
VenueName 
SuburbName 
StateName 

Répondre

2
var locations = from loc 
       in dataContext.Locations 
       where loc.Venues.Count > 1 
       select loc 

EDIT: La réponse finale

Si vous avez la configuration des clés étrangères entre Lieu/Lieu:

string stateName = "New York"; 

var locations = from loc 
       in dataContext.Locations 
       where loc.Venues.Count > 1 && loc.StateName == stateName 
       select loc; 

S'il n'y a pas une relation de clé étrangère:

string stateName = "New York"; 

var locations = (from v 
       in dataContext.Venues 
       where v.StateName == stateName 
       select (from l 
         in dataContext.Locations 
         where l.SuburbName == v.SuburbName && l.StateName == v.Statename    
         select l 
         ).Single()).Distinct(); 

Vraiment bien, vous devriez répare tes tables. La table Venue devrait avoir un suburbID au lieu de "StateName" et "SuburbName" - il est redondant pour garder les deux.

+0

Je savais que la table devrait avoir SuburbID mais parfois l'utilisateur peut entrer dans la banlieue qui n'est pas encore dans la base de données? –

+0

S'il n'est pas encore dans la base de données, ajoutez-le avant d'insérer le site. Ou faites entrer l'utilisateur dans une nouvelle banlieue avant qu'il ne puisse y ajouter un lieu. –

+0

Supposons qu'un utilisateur entre complètement les informations d'un site - à ce stade, vous avez suffisamment d'informations pour stocker une banlieue. (sauf s'il y a des champs que nous ne voyons pas). –

0

est ici quelques réponses simples:

var suburbNames = dataContext.Venues 
    .Where(v => v.StateName == specificState) 
    .GroupBy(v => v.SuburbName) 
    .Select(g => g.Key) 

      // 

var locations = dataContext.Location 
    .Where(loc => loc.StateName == specificState) 
    .Where(loc => loc.Venues.Any()) 

Avec cette propriété Venues: vous pouvez obtenir qu'en ajoutant la relation dans le concepteur LINQ to SQL - même si la clé étrangère n'existe pas/n » t appliqué dans la base de données.