Я пытаюсь преобразовать этот тестовый код в C#, и у меня возникла проблема с командой Trim. Кто-нибудь делал что-то подобное в C#, собираясь использовать это с текстовым полем для поиска на странице aspx.
Dim q = From b In db.Blogs _
Where b.BlogContents.Contains(txtSearch.Text.Trim()) Or _
b.BlogTitle.Contains(txtSearch.Text.Trim()) _
Select b





не уверен, что вы спрашиваете, но функция Trim в C# такая же.
В чем проблема? А что это за LINQ-провайдер? Набор в памяти (LINQ-to-Objects)? Или LINQ-to-SQL? Или LINQ-to-Entities?
I подозревать вы получаете что-то о провайдере LINQ db, не зная о Trim () - в этом случае попробуйте сначала выполнить обрезку:
string s = txtSearch.Text.Trim();
var q = from b in db.Blogs
where b.BlogContents.Contains(s) || b.BlogTitle.Contains(s)
select b;
Это решает три отдельные проблемы два:
1: захватывает: в оригинале именно txtSearch захватывается в запрос, который имеет сложности; сначала оценивая Trim, захватывается именно s, который представляет собой простую неизменяемую строку
2: сложность выражения: с LINQ на основе выражений (т.е. с базой данных) выражение весь (включая .Text, .Trim и т. д.) Является частью выражения. Если поставщик LINQ не распознает один или несколько из них, он завершится ошибкой. Если сначала свести его к строке, все, что нужно обработать провайдеру LINQ, - это строка, с которой каждый провайдер должен быть доволен.
(добавлен)
3: повторное вычисление: LINQ-to-Objects очень буквальный; если вы попросите его использовать сложную операцию в Where (и т. д.), это воля, даже если очевидно, что ответ не меняется для каждой строки; то есть txtSearch.Text.Trim() не должен изменяться для каждой строки, так зачем оценивать его для каждой строки? Оцените его перед запросом, и это будет сделано только один раз.
Я тоже столкнулся с этим при переходе на C#. Intellisense намного хуже в C#: <
Убедитесь, что вы не оставили () после обрезки.