我试过这些:
public async Task<bool> NameExists(string name)
{
var productCategories = await this._dbContext.ProductCategories
.Where(c => String.Compare(c.Name, name, StringComparison.InvariantCultureIgnoreCase) > 0).ToListAsync();
return productCategories.Count > 0;
}
public async Task<bool> NameExists(string name)
{
int count = await this._dbContext.ProductCategories
.CountAsync(c => String.Compare(c.Name, name, StringComparison.InvariantCultureIgnoreCase) > 0).t
return count != 0;
}
但在这两种情况下,我都收到了错误消息:
System.InvalidOperationException: 'The LINQ expression 'DbSet<ProductCategory>()
.Where(p => string.Compare(
strA: p.Name,
strB: __name_0,
comparisonType: InvariantCultureIgnoreCase) > 0)' could not be translated
我在网上搜索了一下,但没有找到任何解决方案。
作为温度";解决方案";我使用这个:
public async Task<bool> NameExists(string name)
{
return await this._dbContext.ProductCategories.AnyAsync(x => x.Name.Trim().ToLower() == name.Trim().ToLower());
你知道如何解决这个问题吗?
谢谢,}
您可以强制进行不区分大小写的排序,有关的更多详细信息,请参阅文档
public async Task<bool> NameExists(string name)
{
var productCategories = await this._dbContext.ProductCategories
.Where(c => EF.Functions.Collate(c.Name, "Latin1_General_CI_AS") == name)
.ToListAsync();
return productCategories.Count > 0;
}
将该列的排序规则设置为不区分大小写意味着您不需要这些。比较将自动不区分大小写,并且可以使用索引。
这个特定的查询在任何情况下都是低效的。你只想知道存在,所以使用.Any
而不是.Count
public async Task<bool> NameExists(string name)
{
var exists = await this._dbContext.ProductCategories
.Where(c => EF.Functions.Collate(c.Name, "Latin1_General_CI_AS") == name)
.Any();
return exists;
}