2 votes

Requête LINQ avec plusieurs clauses StartsWith ?

J'ai une requête LINQ qui fonctionne comme elle est supposée le faire comme suit,

var query = DataContext.TenantDataServerTables.Where(p => 
             p.Nursing_Home_Section == homeSection &&
             p.Tenant_Kana_Last.ToString().StartsWith(@"ア") ||
             p.Tenant_Kana_Last.ToString().StartsWith(@"イ") ||
             p.Tenant_Kana_Last.ToString().StartsWith(@"ウ") ||
             p.Tenant_Kana_Last.ToString().StartsWith(@"エ") ||
             p.Tenant_Kana_Last.ToString().StartsWith(@"オ"));
        }

Y a-t-il un moyen de faire quelque chose comme ça pour rationaliser la requête ?

char[] array = new char[] { 'ア', 'イ', 'ウ', 'エ', 'オ' };

var query = DataContext.TenantDataServerTables.Where(p => 
                 p.Nursing_Home_Section == homeSection &&
                 p.Tenant_Kana_Last.ToString().StartsWith(array));

Ce n'est qu'un exemple, car il y a beaucoup d'autres caractères que je dois vérifier. StartsWith sur la requête LINQ.

6voto

HimBromBeere Points 8328

Comme toute chaîne de caractères n'est rien d'autre qu'un tableau de caractères, vous pouvez effectuer n'importe quelle recherche linq sur cette chaîne. Utilisez simplement le tout premier caractère et vérifiez s'il fait partie de votre tableau en utilisant Contains :

var query = DataContext.TenantDataServerTables.Where(p => 
             p.Nursing_Home_Section == homeSection &&
             array.Contains(p.Tenant_Kana_Last.ToString()[0]));

Alternativement à p.Tenant_Kana_Last.ToString()[0] vous pouvez également utiliser p.Tenant_Kana_Last.First() qui est un peu plus facile à lire.

6voto

dasblinkenlight Points 264350

Vous pouvez utiliser votre tableau de "départs" en Any prédicat, comme ceci :

var array = new string[] {@"ア", @"イ", @"ウ", @"エ", @"オ"};
var query = DataContext.TenantDataServerTables.Where(p => 
    p.Nursing_Home_Section == homeSection &&
    array.Any(prefix => p.Tenant_Kana_Last.ToString().StartsWith(prefix))
);

5voto

Lukas Körfer Points 5050

Si vous voulez vérifier uniquement les caractères, vous pouvez utiliser l'approche de HimBromBeere. Si le tableau doit contenir des chaînes de plus d'un caractère, essayez ceci :

var query = DataContext.TenantDataServerTables.Where(p =>
    p.Nursing_Home_Section == homeSection &&
    array.Any(str => p.Tenant_Kana_Last.ToString().StartsWith(str)));

3voto

qxg Points 4885

Vous pouvez remplacer

p.Tenant_Kana_Last.ToString().StartsWith(array)

avec

array.Any( c => p.Tenant_Kana_Last.ToString().StartsWith(c))

3voto

Ronan Thibaudau Points 802
char[] array = new char[] { 'ア', 'イ', 'ウ', 'エ', 'オ' };
var query = DataContext.TenantDataServerTables
    .Where(p => p.Nursing_Home_Section == homeSection 
                && array
                    .Any(c=>p.Tenant_Kana_Last.ToString().StartsWith(c));

Any renvoie vrai si au moins 1 correspond à la Vérité, fonctionnera comme vos opérateurs ou enchaînés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X