LINQ Lambda, Groupe de avec la liste
Je vais avoir un peu de difficulté à trouver la bonne syntaxe pour accomplir les opérations suivantes:
Est-il possible avec LINQ (Expression Lambda).GroupBy de données et au lieu de l'aide de l'habitude .Sum() ou .Count() je veux que les données qui en résultent en une Liste de Int.
J'ai défini ma propre classe nommée: Filter_IDs. Son constructeur a besoin de deux paramètres:
public int? type; //Represents the object_type column from my database
public List<int?> objects; //Represents the object_id column from my database
Je veux charger des données à partir de ma base de données dans cet objet. La requête LINQ suivante devrait résulter en une Liste de Filter_IDs:
La suite d'une requête LINQ devrait résulter en une Liste de Filter_IDs:
List<Filter_IDs> filterids = ef.filterLine
.GroupBy(fl => fl.objectType)
.Select(fl => new Filter_IDs { type = fl.Key, objects = fl.Select(x => x.object_id).ToList() })
.ToList();
À l'aide de cette requête donne aucun bâtiment d'erreur, mais donne une "NotSupportedException' sur l'Exécution.
La base de données ressemble à ceci pour vous donner une meilleure compréhension des données:
http://d.pr/i/mnhq+ (droplr image)
Merci d'avance,
Gerben
ef.filterLine
?ef est le contexte et le filterLine est la table de base de données qui contient object_id et objectType.
Si vous ne
ef.filterLine.ToList()
?Que serait le travail oui, mais filterLine a plus de colonnes que de simplement objectid et objectType. Je ne veux pas de ces autres valeurs à partir d'autres colonnes.
OriginalL'auteur G Versluis | 2012-12-06
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème est le DB n'est pas en mesure d'appeler ToList dans la sélection, ni de créer une nouvelle Filter_ID.
Essayer quelque chose comme cela :
OriginalL'auteur Kek
Peut-être vous voulez
Obtenir la liste distincte
objectType
et de l'utiliser pour la sous-requête pour chaque liste deobject_id
.Cependant, il semble plus efficace pour moi de simplement énumérer les valeurs dans l'ordre,
OriginalL'auteur Jodrell
Vous pouvez utiliser GroupBy sur le côté client:
Je préfère le groupby dans la base de données. Ce kek a donné comme réponse est pour moi la bonne. J'apprécie l'aide!
Kek, en général, il repose sur des indices et ainsi de suite, mais dans ce cas, je suppose que vous avez raison. Nous pouvons nous déplacer AsEnumerable() vers le bas sur une ligne 🙂
OriginalL'auteur Kirill Bestemyanov