2010-04-05 3 views
1

Le scénario est que je veux obtenir les utilisateurs qui ont moins de 2 photos.Comment utiliser Linq To Sql pour obtenir des utilisateurs qui ont moins de 2 photos?

Il y a deux tables:

[Users] (UserId, UserName) 

[UserPhotos] (PhotoId, PhotoName, UserId) 

UserId est une clé étrangère, mais je ne veux pas utiliser l'association comme user.Photos.

Un utilisateur ne peut avoir aucune photo dans la table [UserPhotos].

Comment utiliser Linq To Sql pour obtenir List<User> avec moins de 2 photos?

Répondre

3

Peut-être ceci: (fixe Version)

List<User> users = UserPhotos.GroupBy(i => i.UserId) 
       .Where(i => i.Count() > 2).Distinct() 
       .Join(Users, o => o.Key, i => i.UserId, (o, i) => i) 
       .ToList(); 
solution

pour la question a changé:

List<User> result = Users.Where(user => !UserPhotos.GroupBy(i => i.UserId) 
      .Where(i => i.Count() >= 2).Distinct() 
      .Any(i => i.Key == user.UserId)).ToList(); 
+0

Merci beaucoup. – Mike108

+0

Oh, il y a un bug: le résultat a manqué les utilisateurs qui n'ont aucune photo. J'ai édité la question, obtenir les utilisateurs qui ont moins de 2 photos. – Mike108

+0

ok, essayez celui-ci. – Nagg

1

Qu'est-ce qui ne va pas avec ça?

var query = from u in dbContext.Users 
      where u.Photos.Count > 2 
      select u; 

Ce serait le plus facile de loin - pourquoi voulez-vous spécifiquement pas utiliser cette méthode ??

+0

Parce qu'il n'y a pas de FK dans l'ancienne application, et je ne peux pas ajouter un FK. – Mike108

+0

Vous pouvez charger par chargement les photos associées à l'utilisateur dans le modèle d'utilisateur. Cela permettra la fonctionnalité ci-dessus ... – xandercoded

Questions connexes