Я использую ASP.NET MVC5 с Entity Framework 6, SQL Server 2012 и в настоящее время после того, как я возвращаю свой Iqueryable для своих данных, а затем звоню в список. Я вызываю свое расширение строки, для которого применяется поисковый запрос пользователей. Я хотел бы применить это в запросе Iqueryable aka sql или получить аналогичную функциональность по-другому. В настоящее время пользователь может искать слова не по порядку, они могут использовать кавычки для поиска всего набора текста в порядке с пробелами. Они также могут использовать wild card, если они не знают определенного числа или буквы.Как преобразовать метод расширения строки в хранимую процедуру в SQL?
Вот моя строка расширение
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
namespace casey.Helpers
{
public static class SearchStringExtension
{
public static bool Like(this string str, string value)
{
List<string> formatedsearch = new List<string>();
string searchForNext = ("");
string searchForx = value;
searchForx = searchForx.ToUpper();
searchForx = searchForx.Replace("\\", @"\\");
searchForx = searchForx.Replace("*", @"\*").Replace("+", @"\+").Replace(":", @"\:").Replace("#", @"\#");
searchForx = searchForx.Replace("(", @"\(").Replace(")", @"\)").Replace("<", @"\<").Replace(">", @"\>");
searchForx = searchForx.Replace("{", @"\{").Replace("}", @"\}").Replace("[", @"\[").Replace("]", @"\]");
searchForx = searchForx.Replace("=", @"\=").Replace("-", @"\-").Replace("_", @"_").Replace("%", @"\%");
searchForx = searchForx.Replace("|", @"\|").Replace("!", @"\!").Replace("^", @"\^").Replace("%", @"\%");
searchForx = searchForx.Replace(".", @"\.");
searchForx = searchForx.Replace("?", ".");
string s = searchForx;
//find all words with quotes around them
//example search string equals I "Like" Fish.
//asigns Like to rgx
Regex rgx = new Regex("\"(.+?)\"");
s = "^";
// add regular and expression with ignore of all charactes before clause to all quoted words and and clause
//example ^(?.*Like)
foreach (Match match in rgx.Matches(searchForx))
{
s += "(?=.*" + match.Value.Trim('"') + ")";
}
//example I "Like" Fish. becomes I Fish
searchForNext = Regex.Replace(searchForx, "\"(.+?)\"", "");
//this formats regular non quoted part of string
char[] delimiter1 = new char[] { ' ' };
formatedsearch = searchForNext.Split(delimiter1, StringSplitOptions.RemoveEmptyEntries).ToList();
//example I Fish becomes ^(?.*Like)(?=.*I)(?=.*Fish)
foreach (string searchvalue in formatedsearch)
{
s += "(?=.*" + searchvalue + ")";
}
//this ignores case and ignores endline characters
if (!string.IsNullOrEmpty(str))
{
Regex r = new Regex(s, RegexOptions.Singleline);
if (r.IsMatch(str.ToUpper()))
return true;
}
return false;
}
}
}
Что это вообще связано с SQL Server? Нигде я не вижу ничего связанного с базой данных. –
это метод расширения строки, который используется в моем предложении where, например CarService.GetAllCars(). Где (u => u.PartDescription.Like (SearchSample)). OrderByDescending (s => s.SubmittalDate). Like is my string extension –