Comment faire pour simuler des expressions régulières dans LINQ-to-SQL

J'ai une table de base de données avec les numéros de compte client. Dans le même tableau sont des comptes de test qui ne correspondent pas à la production de formatage: "dis: 'A1111' est de la production, mais "JTest' ne l'est pas. J'ai la Regex qui va tirer seulement mes comptes de production. J'ai besoin d'une requête compilé pour tirer seulement les comptes de production. La requête me donne un comptage des clients par région et par jour; et le concept de compte au sein de chaque région:

        getCustomerDistribution = CompiledQuery.Compile<DataContext, String, DateTime, IEnumerable<ServerLoad>>(
            (context, region, processDate) => (from cust in context.GetTable<tbl_CustomerDistro>()
                                               where cust.ProcessedDate.Date == processDate.Date
                                               where cust.Region == region
                                               where Regex.IsMatch(cust.AcctNum, ProductionMask)
                                               group cust by new
                                               {
                                                   cust.Region,
                                                   cust.Concept
                                               } into custDistro
                                               orderby custDistro.Key.Region
                                               select new CustomerDistro
                                               (
                                                   custDistro.Key.Region,
                                                   custDistro.Key.Concept,
                                                   custDistro
                                                    .Where(c => c.Concept == custDistro.Key.Concept)
                                                    .Select(c => c.Concept).Count()
                                               )));

Problème est que je reçois le message suivant au moment de l'exécution:

Méthode Boolean IsMatch(Système D'.Chaîne,
Système.String)' n'a pas pris en charge
traduction en SQL.

J'ai été à la recherche à un utilisateur défini func:

static Func<striing, bool> IsProduction = (AcctNum) => Regex.IsMatch(AcctNum, ProductionMask);

Cela ne fonctionne pas non plus. Je ne veux pas répéter les enregistrements qui sont extraites à filtrer à moins qu'il n'y a simplement pas d'autre moyen pour ce faire.

Est-il un moyen de le faire avec Prédicat Builder?

Mise à jour:

Une autre option, je pense, serait d'utiliser:

where SqlMethods.Like (cust.AcctNum, ProductionMask)

Cependant, mon ProductionMask est écrit pour les Regex:

^[B,G]\d{4}$

Est-il un moyen de le faire avec le SqlMethods.Comme(...)?

Mise à jour 2:

C'est une très lent en cours d'exécution de la requête. J'ai 3 régions que cette requête s'exécute contre et le nombre d'enregistrements & les délais de retour sont les suivantes:
263: 903ms
342: 822ms
146: 711ms

OriginalL'auteur IAbstract | 2011-04-19