c# - Linq to Entities - 多列搜索

标签 c# linq entity-framework

我有一个具有 3 个可搜索属性的实体 Car:

Brand       Model            Code
----------- ---------------- -----------
Ferrari     F40              X7844ADFS
Porsche     911 Turbo        YSAD42313

我有以下方法:

public IEnumerable<Car> SearchCar(string search)
{
    IEnumerable<Car> result = Enumerable.Empty<Car>().AsEnumerable();

    if (!string.IsNullOrEmpty(search))
    {
        var preResult = from A in _context.Cars
                  select new { TextField = A.Brand + " " +  A.Model + A.Code,
                               car = A};
        result = preResult.Where(x => x.TextField.ToLower().Contains(searchValue.ToLower())).Select(v => v.Car);
    }
    return result;
}

搜索示例:

  • 保时捷 Turbo
  • 法拉利
  • YSAD42313

但是,此方法不适用于第一个 (Porsche Turbo)。有没有办法做到这一点,以便它在所有情况下都能正常工作?

最佳答案

您需要拆分 search 变量中的不同词,然后单独搜索这些词。像这样:

var splitSearch = search.Split(' ');
result = preResult.Where(x => splitSearch.All(s => x.TextField.ToLower().Contains(s)))
                  .Select(v => v.Car);

关于c# - Linq to Entities - 多列搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27987266/

相关文章:

c# - 为什么 Entity Framework 不能在 LINQ 语句中使用 ToString()?

c# - 用于链接查询组合的 Linq 语法

c# - 不支持每种类型的多个对象集。对象集 IdentityUsers' 和 Users 都可以包含类型的实例

c# - 比较来自同一类的两个对象与大量字段

C# 根据内容类型获取文件扩展名

c# - 将列表分组为每组 X 项的组

entity-framework - Entity Framework : Using ExecuteSqlCommand to clear a table causes an exception because of the ObjectStateManager

entity-framework - 从代码调用 Entity Framework 函数导入

c# - 如何使用 C#、WMI 和/或 System.Management 从 IIS 6.0 获取站点列表和 SSL 证书?

c# - 使用 C# 在 MYSQL 中声明局部变量时发生 fatal error