407

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 は何ですか?

4

14 に答える 14

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

.StartsWith()またはも使用できます.EndsWith()

于 2009-05-07T16:45:50.067 に答える
259

これを使って:

from c in dc.Organization
where SqlMethods.Like(c.Hierarchy, "%/12/%")
select *;
于 2010-06-15T13:48:19.973 に答える
43

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 が生成されます。

于 2009-05-07T16:46:19.503 に答える
29

VB.NET を使用している場合、答えは "*" になります。where句は次のようになります...

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

注: "*" は 0 個以上の文字に一致します。Like operator に関する msdn の記事は次のとおりです。

于 2009-05-07T17:34:39.870 に答える
8

indexOfは私にも役立ちます

var result = from c in SampleList
where c.LongName.IndexOf(SearchQuery) >= 0
select c;
于 2011-10-04T11:56:52.160 に答える
4

そのようなコードを使用してください

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;
}
于 2016-08-08T12:48:57.277 に答える
3

数値文字列に一致しない場合は、常に共通のケースを使用することをお勧めします:

.Where(oh => oh.Hierarchy.ToUpper().Contains(mySearchString.ToUpper()))
于 2016-11-25T00:19:18.953 に答える
2
System.Data.Linq.SqlClient.SqlMethods.Like("mystring", "%string")
于 2018-11-30T14:07:54.380 に答える