linq 대소 문자를 구분하지 않음 (toUpper 또는 toLower 제외)
public Articles GetByName(string name, Categories category, Companies company)
{
var query = from article in session.Linq<Articles>()
where article.Name == name &&
article.Category == category &&
article.Company == company
select article;
return query.FirstOrDefault();
}
쿼리가 대소 문자를 구분하지 않는 방법. toLower 또는 toUpper를 사용할 수 있지만 OrdinalIgnoreCase를 사용하고 싶습니다. 가능합니까?
String.Equals적절한 매개 변수와 함께 사용 하여 대소 문자를 구분하지 않습니다.
mySource.Where(s => String.Equals(s, "Foo", StringComparison.CurrentCultureIgnoreCase));
대신 방법을 ==사용하십시오 .Equals(name, StringComparison.OrdinalIgnoreCase).
var query = from article in session.Linq<Articles>()
where article.Name.Equals(name, StringComparison.OrdinalIgnoreCase) &&
article.Category.Equals(category) &&
article.Company.Equals(company)
select article;
return query.FirstOrDefault();
대 / 소문자를 구분하지 않는 데이터 정렬을 사용하는 데이터베이스에 대한 LINQ to SQL 쿼리 인 경우 이미 대 / 소문자를 구분하지 않습니다. LINQ to SQL은 실제로 == 호출을 실행하지 않습니다. 그것은 그것을 표현식으로보고 그것을 SQL의 같음 연산자로 변환합니다.
LINQ to Objects 인 경우 다른 포스터에서 지적한대로 String.Equals를 사용할 수 있습니다.
var query = from article in session.Linq<Articles>()
where string.Equals(article.Name,name, StringComparison.OrdinalIgnoreCase) &&
string.Equals(article.Category,category, StringComparison.OrdinalIgnoreCase) &&
string.Equals(article.Company,company, StringComparison.OrdinalIgnoreCase)
select article;
return query.FirstOrDefault();
또한 Name, Category, Company가 null
사용하다
String.Equals(article.Name, name, StringComparison.OrdinalIgnoreCase)
C # 6.0을 사용하는 경우 LINQ 문을 생성 할 때 사용할 짧은 확장 메서드를 정의 할 수 있습니다.
public static bool EqualsInsensitive(this string str, string value) => string.Equals(str, value, StringComparison.CurrentCultureIgnoreCase);
용법:
query.Where(item => item.StringProperty.EqualsInsensitive(someStringValue));
6.0 미만의 C #의 경우 다음과 같이 표시됩니다.
public static bool EqualsInsensitive(this string str, string value)
{
return string.Equals(str, value, StringComparison.CurrentCultureIgnoreCase);
}
다음으로 변경
public Articles GetByName(string name, Categories category, Companies company)
{
var query = from article in session.Linq<Articles>()
where string.Equals(article.Name, StringComparison.CurrentCultureIgnoreCase) == name &&
string.Equals(article.Category, StringComparison.CurrentCultureIgnoreCase == category &&
string.Equals(article.Company, StringComparison.CurrentCultureIgnoreCase == company
select article;
return query.FirstOrDefault();
}
데이터베이스에서 지원한다고 확신 하는 경우 string.Equals (name, article.Name, StringComparison.OrdinalIgnoreCase) 를 사용하십시오.
예를 들어, NOCASE의 대조를 가진 SQLite는 옵션을 무시합니다. Oracle은 취할 세션 설정 NLS_COMP, NLS_SORT를 사용합니다.
그렇지 않으면 문화 문제가 없을 때 ToLower () 또는 ToUpper ()를 사용하십시오.
참조 URL : https://stackoverflow.com/questions/5312585/linq-case-insensitive-without-toupper-or-tolower
'Program Club' 카테고리의 다른 글
| 이름이 변수에 포함 된 Perl 서브 루틴을 어떻게 우아하게 호출 할 수 있습니까? (0) | 2021.01.05 |
|---|---|
| NetBeans가 후행 공백을 제거하고 저장시 탭을 공백으로 변경할 수 있습니까? (0) | 2021.01.05 |
| MySQL에 UTF-8 MB4 문자 (ios5의 이모티콘)를 삽입하는 방법은 무엇입니까? (0) | 2021.01.05 |
| 라우터 탐색은 동일한 페이지에서 ngOnInit를 호출하지 않습니다. (0) | 2021.01.05 |
| 장고 템플릿을 사용하여 트리 구조 (재귀)를 렌더링하려면 어떻게해야합니까? (0) | 2021.01.05 |