Je suis nouveau à C#, ASP.NET, MVC, LINQ et presque tout ce que je fais. Nous avons développé un prototype opérationnel d'un système de planification d'événements qui répertorie tous les événements pour tous les sites sans tenir compte du site qui planifie quel événement. Nous adaptons le prototype à une version complète et souhaitons désormais que les planificateurs ne voient que les événements pour les sites qu'ils planifient. Ma première tentative consiste à remplir une liste d'entiers contenant l'ID des sites que le planificateur peut planifier. J'utiliserais ensuite .contains pour déterminer si les événements se trouvent dans la liste des sites de l'utilisateur connecté. J'ai donc la requête suivante qui fonctionne (notez que l'utilisateur ne peut pas encore sélectionner plusieurs sites, c'est pourquoi j'utilise .FirstOrDefault() parce que nous avons des problèmes de données avec lesquels nous travaillons avec le client. inclus la méthode complète plus bas):Retour d'une liste d'entiers et en utilisant .contains()
int site = (from u in context.Employees
join hf in context.SiteHomeFacs on u.Default_Location_Code equals hf.HomeFac
where u.User_ID == usr
select hf.siteID).FirstOrDefault();
var sites = new List<int> {site};
return sites;
maintenant, je veux par défaut des rôles d'être en mesure de planifier tous les sites et c'est là que je commence à avoir des problèmes (méthode complète ici):
public List<int> GetUserSites(string usr)
{
try
{
using (var context = new DBcontext())
{
if (HttpContext.Current.User.IsInRole("Owner") || HttpContext.Current.User.IsInRole("Controller"))
{
var everySite = (from s in context.Sites
select new List<int> { s.ID });
return everySite;
}
var site = (from u in context.Employees
join hf in context.SiteHomeFacs on u.Default_Location_Code equals hf.HomeFac
where u.User_ID == usr
select new List<int> { hf.siteID }).FirstOrDefault();
return sites;
}
}
catch (Exception)
{
throw;
}
}
L'erreur sur 'return everySite' est:
Impossible de convertir implicitement le type 'System.Linq.IQueryable>' en 'System.Collections.Generic.List'. Une conversion explicite existe (vous manque un casting?)
Pour moi, il semble contre-intuitif que la requête serait acceptable avec .FirstOrDefault()
, mais pas sans elle. Quelqu'un peut-il m'aider à retourner une liste de valeurs entières afin que je puisse utiliser .contains? Ou suggérer un meilleur moyen de tous?
Si votre liste est longtemps et vous devez faire beaucoup de vérification, je voudrais utiliser un HashSet au lieu d'une liste - la performance est beaucoup mieux pour les recherches. retourne un nouveau HashSet (everySite); –
@ShannonHolsinger Oui vous avez raison, ajouté! – Sajeetharan
Il convient de mentionner que 'select new List {s.ID}' devrait être 'select s.ID'. –