2014-07-18 2 views
1

Il y a deux tables dans ma base de données: InvoiceDetail et ProductDetail. Je veux écrire une condition de recherche dans laquelle si je recherche un produit ou un client, il affichera la facture correspondante. Voici mon code pour searchClickevent.Comment convertir un unicode en requête linq?

Il est de donner une erreur The query syntax is not valid. Near term '>', line 6, column 136.

protected void SearchInvoiceButton_Click(object sender, EventArgs e) 
{ 
    String WhereClause = "[email protected] AND it.IsDeleted == false AND (it.ClientDetail.ClientName LIKE '%' + @SearchTerm + '%') OR (it.InvoiceDetail.Any(p=>p.ItemName))"; 
    EntityDataSourceInvoice.Where = WhereClause; 
    ViewState["InvoiceViewWhereClause"] = WhereClause; 

    if (EntityDataSourceInvoice.WhereParameters["SearchTerm"] != null) 
    { 

     EntityDataSourceInvoice.WhereParameters["SearchTerm"].DefaultValue = SafeSearchLiteral(SearchTextBox.Text.Trim()); 
    } 

    else 
    { 
     Parameter CategoryParameter = new Parameter("SearchTerm", System.Data.DbType.String, SafeSearchLiteral(SearchTextBox.Text.Trim())); 
     CategoryParameter.ConvertEmptyStringToNull = false; 
     EntityDataSourceInvoice.WhereParameters.Add(CategoryParameter); 
    }   
    InvoiceGrid.DataBind(); 
    InvoiceGrid.AllowPaging = false; 
    InvoiceGrid.AllowPaging = true; 
} 
+5

't.InvoiceDetail.Any (p => p.ItemName)' n'est pas valide SQL. Dans quelle base utilisez-vous cette base de données? – flindeberg

+2

Vous ne pouvez pas utiliser LINQ dans la clause SQL where. La même chose s'applique à 'it.UserID == @ UserID' - c'est C#, pas SQL. Je pense que vous confondez LINQ et SQL ... Pourquoi utilisez-vous SQL personnalisé de toute façon? Il ne semble pas y avoir de raison de le faire. – Luaan

+1

assez sûr que cela n'a absolument rien à voir avec "unicode"; vouliez-vous dire "lambda"? –

Répondre

0

Essayez ceci: -

Je ne sais pas la structure de classe/table/EntityDataSource mais je pense que cela devrait fonctionner, le changement seulement est whereClause: -

String WhereClause = "[email protected] AND it.IsDeleted == false 
AND ((it.ClientDetail.ClientName LIKE '%' + @SearchTerm + '%') 
OR (it.ItemName LIKE '%'+ @SearchTerm + '%'))"; 
+3

Vous devriez expliquer ce que vous avez fait ici. À première vue, le code ressemble à un copier-coller de la question de l'OP. Vous auriez pu simplement copier la variable WhereClause au lieu du code entier. –

+0

son erreur donnant "'InvoiceDetail' n'est pas un membre de type 'OnlineInvoiceModel.InvoiceDetail' dans les schémas actuellement chargés Près de l'identificateur simple, ligne 6, colonne 117." – user3852915

+0

'ItemName' n'est pas membre du type 'OnlineInvoiceModel.InvoiceDetail' dans les schémas actuellement chargés. Près de l'identificateur simple, ligne 6, colonne 117. – user3852915

Questions connexes