J'utilise Linq 2 entités.
Voici le problème: conversion attendue: comme "% Test% .doc%" P> Si c'était Linq 2 SQL, j'aurais pu utiliser SQLMMETHODS. Quelqu'un a répondu dans ma question précédente. Mais maintenant, comme j'utilise L2E et non L2S, j'ai besoin d'une autre solution. P> p>
6 Réponses :
Vous pouvez essayer d'utiliser Cet article , où l'auteur explique comment créer une instruction similaire avec des caractères génériques à Linq aux entités de Linq aux entités.
Editer: puisque le lien d'origine est maintenant mort, voici la classe d'extension d'origine (selon Jon Koeter dans les commentaires ) et exemple d'utilisation. P>
extension: strong> p> Exemple d'utilisation: strong> p> string strEmailToFind = "*@yahoo.com"
IQueryable<User> myUsers = entities.Users.WhereLike(u => u.EmailAddress, strEmailToFind, '*');
J'ai vu cela plus tôt, cela n'a pas d'exemple pour l'utiliser
Voici un exemple: entités.Table.werelike (El => El.position, position, '%'). Vous devez donc définir la colonne que vous recherchiez, modèle à la recherche et au caractère générique. Mais j'ai testé et j'ai trouvé que cela ne vous aidera pas - cela ne traite pas de caractères génériques qui ne sont pas au début ou à la fin du motif, désolé.
Mais comment allez-vous combiner plusieurs clauses? Par exemple, pour générer "où le prénom comme" A% "ou un nom d'attache comme" A% ""?
"Cet article" link TrentaCular.com / 2010/08 / ... est "non trouvé" ... TrentaCular.com montre "Trentatacular. com est presque ici! Téléchargez votre site Web pour commencer. "
Malheureusement, le lien est la pourriture. C'est pourquoi le lien Seule seulement les réponses doivent être évitées
L'article semble être en panne. Vous pouvez afficher ma réponse, dérivé de l'article, ici: Stackoverflow.com/Questtions/2542288/...
Pourquoi je ne peux pas faire .werelike ()? Son rouge souligné. Dois-je importer des classes?
Cela ne fonctionnera pas pour les cas sans fauve sauvage. Dans SQL, c'est insensible à la casse, '=' peut être soit en fonction de la configuration. Si je voulais faire un cas complet de recherche insensible à une recherche insensible, cela ne se traduit pas comme des substituts similaires = à la place.
Utilisez une expression régulière ...
Les suivants imprimeront tous les fichiers du répertoire actuel qui correspondent test em> .doc * (style wildcard DOS - ce que vous croyez 'RE Demander) P> using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace RegexFileTester
{
class Program
{
static void Main(string[] args)
{
string[] _files = Directory.GetFiles(".");
var _fileMatches = from i in _files
where Regex.IsMatch(i, ".*test*.doc.*")
//where Regex.IsMatch(i, ".*cs")
select i;
foreach(var _file in _fileMatches)
{
Console.WriteLine(_file);
}
}
}
}
Non ceci n'est pas requis. Vous obtenez tous les fichiers, puis filtrant cela est un transfert inutile de données.
Quelle est l'alternative? Je viens de faire exactement cela dans mon code, comment puis-je sélectionner et interroger les noms de fichiers en même temps?
Utilisez Directory.EnumerateFiles (chemin, SearchPattern) à la place. (Mais je pense qu'il veut interroger un dB)
diviser la chaîne
Suite à partir de la réponse correcte de Magnus, voici une méthode d'extension pouvant être réutilisée, car j'avais besoin dans mon projet.
var terms = "%test%.doc%"; Expression<Func<Doc, bool>> whereClause = d => d; whereClause = whereClause.WildCardWhere(d => d.docName, terms, '%'); whereClause = whereClause.WildCardWhere(d => d.someOtherProperty, "another%string%of%terms", '%'); var result = ListOfDocs.Where(whereClause).ToList();
Merci @legolomaniac, c'est une très bonne solution, mais j'ai du mal à l'obtenir pour construire ... Spécifiquement sur `Source = Source.Et (` Cela me dit, "Pas de surcharge pour la méthode" et "prend 1 arguments " b>
La méthode SQL Patindex fournit la même fonctionnalité que similaire. Par conséquent, vous pouvez utiliser sqlfonctions.patidex méthode :
.Where(x => SqlFunctions.PatIndex("%test%.doc%", x.MySearchField) > 0)
Travaillé comme un charme. Merci BG!
Remarque: vous avez besoin de "à l'aide de system.data.entity.sqlserver;" pas "à l'aide de system.data.objects.sqlclient;" Voir
Excellent! Oui, J'aime == Patindex> 0 code> docs.microsoft.com/en-us/sql/t-sql/functions/.../a> Les gens ont vraiment besoin de uplifier cette réponse car presque chaque message a des charges de mauvaises réponses acceptées (comme ce post fait et il est vraiment difficile de déterminer que c'est la façon de le faire.
@jgerman Ce serait la solution souhaitée. Cependant, maintenant trois ans plus tard, je ne pense pas que system.data.entity.sqlserver est disponible dans l'entité Framework Core 1.1. : /
Patindex est aussi beaucoup plus lent que comme
Alors j'essayais la même chose - essayer de jumeler une liste pour renvoyer tous les candidats correspondant à un SearchTerm. Je le voulais afin que si un utilisateur a dactylographié «Arizona», il restituerait tout ce que vous aviez Arizona. En outre, si l'utilisateur a dactylographié "Arizona cha", il retournerait des articles comme "Changement de licence Arizona". Les suivants ont fonctionné:
private List<Certification> GetCertListBySearchString() { string[] searchTerms = SearchString.Split(' '); List<Certification> allCerts = _context.Certifications.ToList(); allCerts = searchTerms.Aggregate(allCerts, (current, thisSearchString) => (from ac in current where ac.Name.ToUpper().Contains(thisSearchString.ToUpper()) select ac).ToList()); return allCerts; }
Pour l'instant, j'ai créé une chaîne SQL de manière dynamique et l'exécute via EXECUTESTOREQUERY et résout mon problème.