【问题标题】:Case insensitive Contains with Dynamic Linq不区分大小写的包含与动态 Linq
【发布时间】:2012-01-03 20:27:55
【问题描述】:

在 Linq-to-objects 上将 Contains 与 Dynamic Linq 一起使用时,搜索区分大小写。我希望能够搜索不区分大小写(如 Linq-to-sql,因为 SQL 服务器默认情况下会这样做)。

类似:

this.someQuery = this.someQuery.Where(field + ".Contains(@0, true)", strValue);

其中true 表示:caseinsensitive = true,就像System.String.Contains 提供的扩展之一。虽然默认情况下我不能使用动态 Linq 扩展 System.String

【问题讨论】:

  • 看来'this.someQuery = this.someQuery.Where(field + "ToLower().Contains(@0, true)", strValue.ToLower());'作品。我对Dynamic.cs做了一些改动,所以不知道默认能不能用。
  • LINQ Contains Case Insensitive 的可能重复项
  • 不是重复的,因为这与动态 linq 无关。

标签: linq linq-to-objects contains


【解决方案1】:

如果你想使用占位符,那么你的代码应该是这样的

this.someQuery = this.someQuery.Where("field" + ".ToLower().Contains(@0.ToLower())", strValue);

【讨论】:

    【解决方案2】:

    使用“toLower”时,请确保包含 ()“ToLower()”

    【讨论】:

      【解决方案3】:

      你能在比较的两边都 .ToLower() 吗?像这样的:

      this.someQuery = this.someQuery.Where(field.ToLower().Contains(strValue.ToLower()));
      

      还是我误解了您要查找的内容?

      【讨论】:

      • ToLower() 在 Dynamic Linq 中不受支持
      • I'll be d*mned...我试过了,它成功了,昨天显然没有工作:this.someQuery = this.someQuery.Where(field + "ToLower().Contains( @0, true)", strValue.ToLower());
      • 不敢相信这么简单。我知道我昨天已经尝试过了,但可能是打错字什么的。谢谢你的建议!
      • 同样,this.someQuery = this.someQuery.Where(String.Format("{0}.ToLower().Contains(\"{1}\")", field, value.ToLower())) 也可以。
      • 另外,看起来应该很明显但我花了一些时间来确保“字段”是一个字符串而不是其他类型(复杂对象、int 等)
      猜你喜欢
      • 2023-04-02
      • 2015-01-22
      • 2014-10-08
      • 2023-04-01
      • 2012-02-18
      • 2015-08-08
      • 2011-10-20
      • 2012-02-03
      相关资源
      最近更新 更多