2017-08-29 2 views
0

Je souhaite obtenir la liste des personnes ayant les mêmes tags que l'utilisateur. Pour cela, j'ai besoin d'utiliser un fetch natif et le framework d'entité. J'ai aussi essayé du sql brut avec EF, mais je ne pouvais pas le faire fonctionner, je ne sais pas comment.Réagissez le tableau JSON natif en tant que paramètre de LINQ Contient

J'ai deux extractions. Les deux retournent un tableau d'objets JSON typique. Donc, je fais ceci:

var users = db.Users 
.Include("TagUsers") 
.Where(u => u.TagUsuario.Any(t => tags.Contains(t.idTag))).ToList(); 

La variable balises est un tableau d'objets à partir d'un React natif Fetch, qui dans ma fonction C# est du type IList<>long.

Le problème est que si ce tableau ont un élément, comme celui-ci const tags = [1]; ou de la chercher comme celui-ci

{0} 
Tags: 
idTag: 1 
Name: "MyTag" 

Je peux retourner les gens avec cette balise, mais si je le fais comme ça const tags = [1, 2]; ou

{0} 
    Tags: 
    idTag: 1 
    Name: "MyTag" 
{1} 
    Tags: 
    idTag: 2 
    Name: "AnotherTag" 

Il ne renvoie rien sur ma demande LINQ.

Mais si je fais quelque chose comme ça sur mon C# fonction:

IList<>long tags = new List<>long(); 
tags.Add(1); 
tags.Add(2); 

Il fonctionne parfaitement.

Le problème ici est que le tableau d'objets de la récupération n'est pas « compatible » avec la déclaration LINQ (Tout, contient). Je suis donc à la recherche d'une alternative.

Que dois-je faire? Modifier le paramètre IList? J'utilise cela parce que accepte null sans planter. Modifier le LINQ? Utiliser Raw SQL? Peut-être une conversion pour obtenir seulement un tableau int avec les balises, pas un objet.

Merci pour tous les conseils et solutions.

+0

Pouvez-vous projeter 'tags' dans un tableau? Par exemple 'tags.Select (t => t.idTag)' – Shoe

+0

essayez d'appeler "AsEnumerable()" sur le IList – barakcaf

Répondre

0

Pouvez-vous essayer d'obtenir les idTags à partir des étiquettes et l'utiliser comme ci-dessous.

var idTags = tags.Select(t => t.idTag); 
var users = db.Users 
       .Include("TagUsers") 
       .Where(u => u.TagUsuario.Any(t => idTags.Contains(t.idTag))).ToList();