J'ai une table de base de données avec un champ qui a des valeurs telles queLINQ to SQL bizarrerie
AAAA
BBBB0001
BBBB0002
CCCC
CCCC
CCCC
et je voudrais savoir combien AAAAs, BBBBs et CCCC il y a (1, ici 2 et 3) .
Si je mis en place quelques requêtes de test dans LINQPad avec ces valeurs dans un tableau:
var Table = new [] {"AAAA", "BBBB1", "BBBB2", "CCCC", "CCCC", "CCCC"};
var query1 = Table.GroupBy(d => d).Select(g => new { K = g.Key, C = g.Count()});
query1.Dump();
var query2 = Table.GroupBy(d => d.Substring(0, 4)).Select(g => new { K = g.Key, C = g.Count()});
query2.Dump();
puis-je obtenir les résultats que j'attends - dans le premier cas groupés par la clé et dans le second groupé par les quatre premiers caractères de la clé
AAAA 1
BBBB1 1
BBBB2 1
CCCC 3
AAAA 1
BBBB 2
CCCC 3
ce qui est bien. Mais si remplacer le tableau par une table SQLite et exécuter les mêmes requêtes, ce que je reçois est
AAAA 1
BBBB1 1
BBBB2 1
CCCC 3
AAAA 1
BBBB 1
BBBB 1
CCCC 3
C'est, la première est correcte, alors que dans le second, le champ est correctement raccourci mais le groupe est erroné .
Quelqu'un a-t-il éclairé ce sujet?
Andrew
SQLite n'est pas LINQ to SQL, n'est-ce pas? Cela ressemble à un mais dans le fournisseur LINQ to SQLite. Je vous suggère de regarder le SQL généré ... –
Le SQL généré n'est probablement pas correct pour SQLite. Le regroupement est probablement effectué avant la troncature de la clé. Pouvez-vous poster ce qui est généré? – dlev
Merci à tous les deux - il s'avère que c'est un bug - ajouter un AsEnumerable() et forcer le groupe à se faire localement est un correctif. – amaca