[.net] Linq에서 SQL Like %를 수행하는 방법은 무엇입니까?

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