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를 만진 것이 처음이었기 때문에, 여러 가지 아직 모르는 것이 많다고 합니다.
Reference
이 문제에 관하여(EntityFramework 6에서는 SqlFunctions.PatIndex이지만 EntityFramework Core에서 패턴 검색은?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mkuwan/items/0e20d59caee2d23f82b8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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는 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를 만진 것이 처음이었기 때문에, 여러 가지 아직 모르는 것이 많다고 합니다.
Reference
이 문제에 관하여(EntityFramework 6에서는 SqlFunctions.PatIndex이지만 EntityFramework Core에서 패턴 검색은?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mkuwan/items/0e20d59caee2d23f82b8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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));
Reference
이 문제에 관하여(EntityFramework 6에서는 SqlFunctions.PatIndex이지만 EntityFramework Core에서 패턴 검색은?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mkuwan/items/0e20d59caee2d23f82b8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)