Как сделать SQL Like% в Linq?

373
задан Matt Dell 11 April 2013 в 14:02
поделиться

4 ответа

.Where(oh => oh.Hierarchy.Contains("/12/"))

Вы также можете использовать .StartsWith () или .EndsWith () .

536
ответ дан 22 November 2019 в 23:59
поделиться

If you are using VB.NET, then the answer would be "*". Here is what your where clause would look like...

Where OH.Hierarchy Like '*/12/*'

Note: "*" Matches zero or more characters. Here is the msdn article for the Like operator.

27
ответ дан 22 November 2019 в 23:59
поделиться

Я предполагаю, что вы используете Linq-to-SQL * (см. Примечание ниже). В таком случае используйте string.Contains, string.StartsWith и string.EndsWith для генерации SQL, использующего оператор SQL LIKE.

from o in dc.Organization
join oh in dc.OrganizationsHierarchy on o.Id equals oh.OrganizationsId
where oh.Hierarchy.Contains(@"/12/")
select new { o.Id, o.Name }

или

from o in dc.Organization
where o.OrganizationsHierarchy.Hierarchy.Contains(@"/12/")
select new { o.Id, o.Name }

Примечание: * = если вы используете ADO.Net Entity Framework (EF / L2E) в .net 3.5, имейте в виду, что он не будет выполнять такой же перевод, как Linq-to-SQL. Хотя L2S выполняет правильную трансляцию, L2E v1 (3.5) преобразуется в выражение t-sql, которое заставит выполнить полное сканирование таблицы для запрашиваемой таблицы, если в вашем предложении where или фильтрах соединения нет другого лучшего дискриминатора.
Обновление: Это исправлено в EF / L2E v4 (.net 4.0), поэтому он будет генерировать SQL LIKE, как это делает L2S.

40
ответ дан 22 November 2019 в 23:59
поделиться

Используйте это:

from c in dc.Organization
where SqlMethods.Like(c.Hierarchy, "%/12/%")
select *;
246
ответ дан 22 November 2019 в 23:59
поделиться
Другие вопросы по тегам:

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