[英]Using Custom Extension Methods inside LinQ (Compare two strings)
我想为 LinQ 创建一个简化的比较器。 这是我当前的代码。
DBContext.product_type
.Where(x => x.name.ToLower()(filter.ToLower())
|| x.description..ToLower()(filter.ToLower())
|| x.online_category.description..ToLower()(filter.ToLower()))
我想使用 linQ 扩展方法来简化它。 到目前为止,这就是我得到的。
DBContext.product_type
.Where(x => x.name.CompareToLower(filter)
|| x.description.CompareToLower(filter)
|| x.online_category.description.CompareToLower(filter))
public static bool CompareToLower(this string str, string comparer)
{
if (str.ToLower().Contains(comparer.ToLower()))
{
return true;
}
else
{
return false;
}
}
这是我得到的错误
linq 到 Entities 无法识别方法 'Boolean CompareToLower(System.String, System.String)' 方法,并且此方法无法转换为存储表达式。
像这样的扩展方法不能转换为 SQL 查询。
@meysamasadi 提供的答案将起作用,但会获取您的整个表格并在客户端进行比较。
如果您希望在数据库端进行比较,最有效的方法是将排序规则更改为不区分大小写(如评论中所建议)。
作为替代方案,您可以使用以下代码:
DBContext.product_type
.Where(x =>
EF.Functions.Like(x.Name, filter)
|| EF.Functions.Like(x.Description, filter)
|| EF.Functions.Like(x.online_category.description, filter))
** 请注意,使用上述方法,您还可以在过滤器和模式中包含通配符https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.dbfunctionsextensions.like?view=efcore-5.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.