Подстановочный поиск LINQ

Я бы хотел сказать, что разница чисто стилистическая, но у меня действительно есть сомнения. Рассмотрим следующий пример:

/*
   Add trim() functionality to JavaScript...
    1. By extending the String prototype
    2. By creating a 'stand-alone' function
   This is just to demonstrate results are the same in both cases.
*/

// Extend the String prototype with a trim() method
String.prototype.trim = function() {
 return this.replace(/^\s+|\s+$/g, '');
};

// 'Stand-alone' trim() function
function trim(str) {
 return str.replace(/^\s+|\s+$/g, '');
};

document.writeln(String.prototype.trim);
document.writeln(trim);

В Safari, Chrome, Opera и Internet Explorer (протестировано в IE7 и IE8) это вернет следующее:

function () {
 return this.replace(/^\s+|\s+$/g, '');
}
function trim(str) {
 return str.replace(/^\s+|\s+$/g, '');
}

Однако Firefox даст немного другой результат:

function () {
    return this.replace(/^\s+|\s+$/g, "");
}
function trim(str) {
    return str.replace(/^\s+|\s+$/g, "");
}

Одиночные кавычки были заменены двойными кавычками. (Также обратите внимание, как пространство отступа было заменено четырьмя пробелами.) Создается впечатление, что по крайней мере один браузер внутренне анализирует JavaScript, как если бы все было написано с использованием двойных кавычек. Можно подумать, что Firefox занимает меньше времени для разбора JavaScript, если все уже написано в соответствии с этим «стандартом».

Что, кстати, делает меня очень грустной пандой, так как я думаю, что одиночные кавычки выглядят намного лучше в коде. Кроме того, в других языках программирования они обычно используются быстрее, чем двойные кавычки, так что это имеет смысл, только если это применимо к JavaScript.

Заключение: Я думаю, что нам нужно больше исследовать это.

Редактировать: Это может объяснить результаты теста Петра-Павла Коха в далеком 2003 году.

Кажется, что одинарные кавычки иногда быстрее в Windows Explorer (примерно 1/3 моих тестов показывали более быстрое время отклика), но если Mozilla вообще показывает разницу, он обрабатывает двойные кавычки немного быстрее. Я не нашел никакой разницы в Опере.

Редактировать 2014: Современные версии Firefox / Spidermonkey больше этого не делают.

37
задан PlayKid 24 June 2009 в 19:18
поделиться

6 ответов

I would use Regular Expressions, since you might not always be using Linq to SQL.

Like this example of Linq to Objects

List<string> list = new List<string>();
list.Add("This is a sentence.");
list.Add("This is another one.");
list.Add("C# is fun.");
list.Add("Linq is also fun.");

System.Text.RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex("This");

var qry = list
    .Where<string>(item => regEx.IsMatch(item))
    .ToList<string>();

// Print results
foreach (var item in qry)
{
    Console.WriteLine(item);
}
35
ответ дан 27 November 2019 в 04:02
поделиться

Вы можете использовать SqlMethods.Like () .

Пример использования:

var results =
        from u in users
        where SqlMethods.Like(u.FirstName, "%John%")
        select u;
79
ответ дан 27 November 2019 в 04:02
поделиться

add System.Data.Linq.SqlClient to your using or imports list then try:

var results= from x in data
             where SqlMethods.Like(x.SearchField, “%something%like%this%”)
             select x;
14
ответ дан 27 November 2019 в 04:02
поделиться
.Where( column LIKE "Pattern")
2
ответ дан 27 November 2019 в 04:02
поделиться

не уверен, используете ли вы LinqToSql или просто linq ... но вы можете использовать такие регулярные выражения:

.Where(dto => System.Text.RegularExpressions.Regex.IsMatch(dto.CustomerName, @"Ad"));
1
ответ дан 27 November 2019 в 04:02
поделиться

Вы говорите LINQ to objects или LINQ to SQL?

Для LINQ to объектов вам придется прибегать к регулярным выражениям я думаю.

0
ответ дан 27 November 2019 в 04:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: