EntityFramework 6에서는 SqlFunctions.PatIndex이지만 EntityFramework Core에서 패턴 검색은?

소개



예를 들어 고객 목록을 표시하는 화면이 있다고 해서 고객을 오십음순으로 검색할 수 있도록 하고 싶을 수 있습니다.
이런 화면입니다.


.Net Framework 4.8에서 Entity Framework6을 사용했지만,이 때는 다음과 같은 코드를 작성했습니다.
   using System.Data.Entity.SqlServer;

   var query = dbContext.Customers;

   //五十順
    string pattern = string.Empty;
    switch (kanaState)
    {
        case KanaButtonValue.A:
            {
                pattern = "[ア-オ]%";
                query = query.Where(x => SqlFunctions.PatIndex(pattern, x.CustomerNameKana) > 0);
                break;
            }
        case KanaButtonValue.KA:
            {
                pattern = "[カ-ゴ]%";
                query = query.Where(x => SqlFunctions.PatIndex(pattern, x.CustomerNameKana) > 0);
                break;
            }
        case KanaButtonValue.SA:
            {
                pattern = "[サ-ゾ]%";
                query = query.Where(x => SqlFunctions.PatIndex(pattern, x.CustomerNameKana) > 0);
                break;
            }
        case KanaButtonValue.TA:
            {
                pattern = "[タ-ド]%";
                query = query.Where(x => SqlFunctions.PatIndex(pattern, x.CustomerNameKana) > 0);
                break;
            }
        case KanaButtonValue.NA:
            {
                pattern = "[ナ-ノ]%";
                query = query.Where(x => SqlFunctions.PatIndex(pattern, x.CustomerNameKana) > 0);
                break;
            }
        case KanaButtonValue.HA:
            {
                pattern = "[ハ-ボ]%";
                query = query.Where(x => SqlFunctions.PatIndex(pattern, x.CustomerNameKana) > 0);
                break;
            }
        case KanaButtonValue.MA:
            {
                pattern = "[マ-モ]%";
                query = query.Where(x => SqlFunctions.PatIndex(pattern, x.CustomerNameKana) > 0);
                break;
            }
        case KanaButtonValue.YA:
            {
                pattern = "[ヤ-ヨ]%";
                query = query.Where(x => SqlFunctions.PatIndex(pattern, x.CustomerNameKana) > 0);
                break;
            }
        case KanaButtonValue.RA:
            {
                pattern = "[ラ-ロ]%";
                query = query.Where(x => SqlFunctions.PatIndex(pattern, x.CustomerNameKana) > 0);
                break;
            }
        case KanaButtonValue.WA:
            {
                pattern = "[ワ-ン]%";
                query = query.Where(x => SqlFunctions.PatIndex(pattern, x.CustomerNameKana) > 0);
                break;
            }
        case KanaButtonValue.OTHER:
            {
                pattern = "[ア-ン]%";
                query = query.Where(x => SqlFunctions.PatIndex(pattern, x.CustomerNameKana) == 0);
                break;
            }
    }

SqlFunctions.PatIndex 을 사용하여 패턴 검색을 수행했습니다.

.NET5에 앱을 올리고 Entity Framework Core를 사용하면 SqlFunctions.PatIndex를 사용할 수 없습니다.



SqlFunctions.PatIndex는 Microsoft 문서에서와 같이 .NET Framework에서만 사용할 수있는 것 같습니다.
그 때문에 대체 수단을 생각할 필요가 나왔습니다.

처음에는 StartWith나 Contains를 사용할 수 있을까라고 시도했지만, %와 같은 와일드카드를 사용할 수 없게 되는 것 같아서 작동하지 않았습니다.
그 후 계속해서 조사한 결과 여기

그림 F. 분 c 지온 s.ぃけ



EF Core 2.0의 새로운 기능 에서 소개되었습니다.
var aCustomers =
    from c in context.Customers
    where EF.Functions.Like(c.Name, "a%")
    select c;

이것을 사용하는 것으로, 패턴 검색을 할 수 있는 것 같습니다.
변경된 코드는 이런 느낌
    pattern = "[ア-オ]%";
    query = query.Where(x => EF.Functions.Like(x.CustomerNameKana, pattern));

이제 이전과 마찬가지로 패턴 검색이 가능해졌습니다.
EF Core를 만진 것이 처음이었기 때문에, 여러 가지 아직 모르는 것이 많다고 합니다.

좋은 웹페이지 즐겨찾기