.Where(oh => oh.Hierarchy.Contains("/12/"))
Вы также можете использовать .StartsWith ()
или .EndsWith ()
.
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.
Я предполагаю, что вы используете 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.
Используйте это:
from c in dc.Organization
where SqlMethods.Like(c.Hierarchy, "%/12/%")
select *;