2010-10-20 6 views
1

J'utilise Linq to Entity Framework 4, ce que j'essaye de faire est de construire une requête qui trouve toutes les entités fournisseurs qui ne commencent pas par une lettre, typiquement ce sont des chiffres, par exemple « 1er choix » Je pensais que ce serait trivial et écrit ceci:Linq to EF Recherche une chaîne qui ne commence pas par une lettre

var letters = Enumerable.Range('A', 26).Select(x => (char)x); 
var results = from supplier in All() 
       where !letters.Contains(supplier.Name[0]) 
       select supplier; 

return results.ToList(); 

Malheureusement cela ne fonctionne pas avec l'erreur:

System.NotSupportedException` 
"Unable to create a constant value of type 'System.Char'. 
Only primitive types ('such as Int32, String, and Guid') are supported in this context." 

fâcheusement cette même requête fonctionne très bien dans LINQPad comme une requête Linq Pour Sql. Comment puis-je contourner cela?

Répondre

2

changement

var letters = Enumerable.Range('A', 26).Select(x => (char)x); 

Pour

var letters = Enumerable.Range('A', 26).Select(x => ((char)x).ToString()); 

Et

where !letters.Contains(supplier.Name[0]) 

Pour

where !letters.Contains(supplier.Name.Substring(0, 1)) 
3
var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
var results = from supplier in All() 
       where !letters.Contains(supplier.Name.Substring(0, 1)) 
       select supplier; 
Questions connexes