2010-09-08 4 views
1

Salut les gens
Je veux rechercher dans le champ des mots-clés comme clé de recherche dans l'ensemble.
par exemple. ma clé est "Wing" mots-clés est "Wing Dress Autres" avec des espaces que dois-je écrire à la place?
Erreur: La méthode 'Comparaison booléenne (System.String, System.String)' n'a pas de traduction prise en charge par SQL.Ajout d'une fonction personnalisée dans l'instruction linq

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Request.QueryString.HasKeys()) 
    { 
     DbDataContext db = new DbDataContext(); 
     var Query = from n in db.Products 
        where Compare(n.Keywords, Request.QueryString["key"]) 
        select n; 
     DataList1.DataSource = Query; 
     DataList1.DataBind(); 
    } 
} 

bool Compare(string keywords,string key) 
{ 
    string[] items = keywords.Split(' '); 
    foreach (string item in items) 
     if (item.Equals(key)) return true; 
    return false; 
} 
+1

Non, vous ne pouvez pas le faire, il a également été demandé un million de fois. – leppie

+0

au lieu de? vous avez dit que quelque chose est vrai ou faux mais ce n'est pas une solution. – kamiar3001

Répondre

2

Dans ce cas, au lieu de Compare, vous pouvez utiliser Contains, qui vérifie si une chaîne est dans une chaîne. cela ne fonctionne pour LINQ

exemple:

var Query = from n in db.Products 
       where n.Keywords.Contains(Request.QueryString["key"]) 
       select n; 

Contient des œuvres pour les tableaux aussi bien.

+0

c'est vrai pourriez-vous s'il vous plaît me donner un exemple? – kamiar3001

5

Que similaires/ans: Custom Method in LINQ to SQL query

Vérifiez cet article complet: What is and what isn't possible with linq

suivant n'est pas possible

// function used in filter 
static bool MyFunc(Nwind.Product p) 
{ 
    return p.ProductName.StartsWith("B"); 
} 
// query that uses MyFunc 
var q = 
    from p in db.Products 
    where MyPriceFunc(p.UnitPrice) > 30m 
    select p 

Il compile sans erreur, mais lorsque vous l'exécutez LINQ SQL lance une exception disant: "La méthode statique System.Boolean MyTest (LINQTest.Nwind.Product) n'a pas de traduction prise en charge par SQL." L'exception est réellement levée lorsque vous essayez d'extraire les résultats de q (par exemple en utilisant l'instruction foreach), car LINQ to SQL tente de convertir les arborescences d'expression en T-SQL uniquement lorsque les résultats sont nécessaires et que la requête doit être exécuté.

Pour corriger l'exemple, vous pouvez simplement copier le code qui vérifie si le nom du produit commence par "B" à la clause where de la requête et cela fonctionnerait bien.

+0

vous avez dit que quelque chose est vrai ou faux, mais ce n'est pas une solution. que dois-je utiliser à la place? code ou exemple – kamiar3001

Questions connexes