Linq로 바꾸려고하는 SQL 절차가 있습니다.
SELECT O.Id, O.Name as Organization
FROM Organizations O
JOIN OrganizationsHierarchy OH ON O.Id=OH.OrganizationsId
where OH.Hierarchy like '%/12/%'
내가 가장 우려하는 라인은 다음과 같습니다.
where OH.Hierarchy like '%/12/%'
예를 들어 / 1 / 3 / 12 /와 같은 계층 구조를 저장하는 열이 있으므로 % / 12 / %를 사용하여 검색하십시오.
내 질문은 Linq 또는 .NET이 백분율 기호를 사용하는 것과 동등한 것입니까?
답변
.Where(oh => oh.Hierarchy.Contains("/12/"))
당신은 또한 사용할 수 있습니다 .StartsWith()
또는 .EndsWith()
.
답변
이것을 사용하십시오 :
from c in dc.Organization
where SqlMethods.Like(c.Hierarchy, "%/12/%")
select *;
답변
Linq-to-SQL *을 사용한다고 가정합니다 (아래 참고 참조). 그렇다면 string.Contains, string.StartsWith 및 string.EndsWith를 사용하여 SQL LIKE 연산자를 사용하는 SQL을 생성하십시오.
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 }
노트 : * = .net 3.5에서 ADO.Net Entity Framework (EF / L2E)를 사용하는 경우 Linq-to-SQL과 동일한 변환을 수행하지 않습니다. L2S는 적절한 변환을 수행하지만 L2E v1 (3.5)은 t-sql 표현식으로 변환되어 where 절 또는 조인 필터에 더 나은 판별 기가없는 경우 쿼리중인 테이블에서 전체 테이블 스캔을 수행합니다.
업데이트 : 이것은 EF / L2E v4 (.net 4.0)에서 수정되었으므로 L2S와 마찬가지로 SQL LIKE를 생성합니다.
답변
VB.NET을 사용하는 경우 대답은 “*”입니다. where 절은 다음과 같습니다.
Where OH.Hierarchy Like '*/12/*'
참고 : “*”0 개 이상의 문자와 일치합니다. 다음은 Like 연산자에 대한 msdn 기사입니다 .
답변
음 indexOf도 저에게 효과적입니다.
var result = from c in SampleList
where c.LongName.IndexOf(SearchQuery) >= 0
select c;
답변
그러한 코드를 사용하십시오
try
{
using (DatosDataContext dtc = new DatosDataContext())
{
var query = from pe in dtc.Personal_Hgo
where SqlMethods.Like(pe.nombre, "%" + txtNombre.Text + "%")
select new
{
pe.numero
,
pe.nombre
};
dgvDatos.DataSource = query.ToList();
}
}
catch (Exception ex)
{
string mensaje = ex.Message;
}
답변
.NET 코어는 이제 EF.Functions.Like
