2009-03-16 8 views
2

Sans l'utilisation de "LIKE" dans Dynamic Linq, cela me rend pratiquement inutile pour créer une requête de recherche avancée.Recherche avancée dans Linq to SQL possible?

Comment avez-vous surmonté ce problème de recherche avancée lors de l'utilisation de Linq to SQL?

Je dois rechercher les types de champs suivants et ils ont tous pu être nul aussi bien:

  • Liste item
  • varchar (colonne LIKE '%' + myText + '%')
  • texte (colonne LIKE '%' + myText + '%')
  • DateTime (colonne> = myDate - si le "myDate" est non nulle évidemment)
  • entier (colonne = myInt - si "myInt" est pas nul, bien sûr)
  • booléen

Je ne peux pas utiliser aussi ExecuteQuery parce que je ne suis pas une véritable « entité » et l'ensemble de ses relations/associations.

Je ne vois tout simplement pas comment je peux le faire avec Linq to SQL. Je suis actuellement sans processus stockés donc je préfère ne pas avoir un proc stocké juste pour cela si je peux comprendre cela avec Linq.

+0

Cette question pourrait vous aider - http://stackoverflow.com/questions/512285/linq-to-sql-select-where-text-like-string-array – tarn

Répondre

2

Pour faire comme déclarations, vous pouvez utiliser la méthode Contains:

string myText = "test"; 
var query = dc.Table.Where(r=>r.Column.Contains(myText)); 

Cela va générer ce genre de déclaration SQL:

SELECT [t0].[Column], ... [t0].[ColumnN] 
FROM [Table] AS [t0] 
WHERE [t0].[Column] LIKE @p0 

Et le paramètre @ p0 aura "%test%" comme valeur.

Pour la comparaison de date et int si je comprends bien ce que vous voulez, vous pouvez le faire:

DateTime? myDate = new DateTime(2009, 3, 15); 
var query = dc.Table.Where(r=> r.DateColumn > myDate || myDate == null); 

Donc, si myDate est nulle, la condition DateColumn > myDate ne sera pas évalué.