L'obtention d'Entités dont les touches correspondent à la liste(ou tableau) de id
Je suis en utilisant CodeFirst EntityFramework. J'ai un IQueryable<User>
Entités qui sont renvoyés à l'aide du contexte.Utilisateurs; où le contexte est DbContext de EntityFramework. À partir de cette liste que j'ai à choisir ceux dont l'Id est contenu dans un tableau d'Identifiants (long). Id est la clé primaire de l'entité utilisatrice. J'ai essayé ce qui suit, mais l'obtention d'erreur du compilateur.
IQueryable<User> users = GetQueryableUsers();
long [] ids = GetSelectedIds(); //array of long representing Ids key of User entities
users.Intersect(ids); //compilation error
users.Where(user => ids.Contains(user.Id)); //compilation error
Erreur de Compilation est (pas de définition que l'on trouve pour se Croisent/Contient)
Remarque: Le Système De.Linq est déjà importé.
Le
Contains
requête doit avoir travaillé.OriginalL'auteur Jatin | 2011-08-10
Vous devez vous connecter pour publier un commentaire.
Assurez-vous que vous êtes du Système de référence.Linq
par exemple
using System.Linq
Alors l'utilisateur.L'Id doit être de type long. Vous l'ai dit dans les commentaires que c'est long? parce que vous avez cru, c'est comment vous nécessaires à l'utilisation de la clé primaire. La solution est d'utiliser de longs et de faire usage de la générer automatiquement des options d'id de l'entité cadre.
Encore un cas plus général pour les non des clés primaires qui pourrait être null serait d'utiliser les contient option avec la valeur par défaut, ou de l'opérateur.
Une clé primaire ne peut jamais être nul - comment peut-il accepter les valeurs null dans votre modèle?
Je m'attendais à ce que la base de données de clés générées doit être passé comme nulle à SQL Server. Si je n'avais pas utilisé depuis longtemps? puis chaque fois que je créé une nouvelle entité, la clé est définie sur 0 (valeur par défaut pour longtemps). Pouvez-vous s'il vous plaît laissez-moi savoir comment gérer la base de données de clés générées dans SQL Server et Entity Framework. En fait, je suis venue à partir d'une plate-forme différente, donc un peu confus.
si c'est une clef d'identité de la DB va générer la clé, il sera mis à jour dans votre modèle lorsque vous enregistrez les modifications (j'.e lors de l'ajout d'une entité) avec les objectifs EF - pas besoin d'utiliser nullable touches à tout.
Bien que j'ai découvert à un stade précoce. Je pense que je vais changer mon modèle et le type de clé non nullable. Merci pour ce morceau de conseils.
OriginalL'auteur Bob Vale
Votre problème est que vous ne peut pas croiser les utilisateurs sur le long id. Se croisent peut uniquement être utilisé sur IEnumerables du même type.
Vous devez utiliser
user.Id.GetValueOrDefault()
parce que votre identité estlong?
au lieu delong
.OriginalL'auteur thekip