【问题标题】:Linq Check if a string contains any query from a listLinq 检查字符串是否包含列表中的任何查询
【发布时间】:2016-01-27 03:18:34
【问题描述】:

我有一个搜索查询字符串列表。
我想查看数据库中的字符串是否包含查询中的任何这些术语。我想在一行代码上执行此操作,不会多次调用数据库。这应该可以,但我希望它更加优化。

var queries = searchQuery.Trim().Split(' ', StringSplitOptions.RemoveEmptyEntries).Distinct();
var query = context.ReadContext.Divisions.AsQueryable();
queries.ForEach(q => { 
           query = query.Where(d => (d.Company.CompanyCode + "-" + d.Code).Contains(q)); 
});

有没有可以更好或更优化的编写方式的函数?

【问题讨论】:

  • 你期待什么输出?您想要包含查询的数据库行还是至少存在一个数据库行的查询?
  • 稍后我会从中选择 ID,但这没关系,我只想知道如何从列表中进行倒置包含,

标签: c# entity-framework linq


【解决方案1】:

您提出的解决方案存在两个问题:

  1. 大多数 LINQ to SQL 提供程序不理解 string.Contains("xyz") 因此提供程序要么抛出异常,要么将所有数据提取到您的计算机。正确的做法是使用 SqlMethods.Like,如Using contains() in LINQ to SQL

  2. 中所述
  3. 此外,您显示的代码将检查除法是否包含指定字符串的所有

要实现“任何”行为,您需要构建一个自定义表达式,而使用普通 C# 是不可能的。您需要查看 System.Linq.Expressions 命名空间:https://msdn.microsoft.com/en-us/library/system.linq.expressions(v=vs.110).aspx

这是可能的,但相当复杂。

【讨论】:

  • 1.实体框架确实理解包含,上面的代码我只是想优化它。 2. 我知道它过滤除法,但我只指一次对单个字符串起作用的谓词。 3. any 功能确实有效,但我不想这样做,因为它会产生多个查询。但加一个努力
猜你喜欢
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2012-11-15
  • 2016-04-27
  • 2015-03-24
  • 1970-01-01
  • 2021-12-11
相关资源
最近更新 更多