【问题标题】:Entity Framework 4 search on combined fields实体框架 4 搜索组合字段
【发布时间】:2011-04-25 19:43:15
【问题描述】:

如何搜索两个组合字段。如果可能,搜索应该在 SQL 端进行。

假设我有一个包含名字和姓氏的客户表。我希望用户能够使用单个搜索框搜索这两个列。

我的查询目前如下所示:

var query = DbContext.Customers
    .Where(c => c.FirstName.Contains(search) || c.LastName.Contains(search));

但应该是这样的

var query = DbContext.Customers
     .Where(c => c.FullName.Contains(search));

【问题讨论】:

    标签: linq entity-framework linq-to-entities


    【解决方案1】:

    除非您还映射了 FullName 列,否则这是不可能的。解决这个问题的方法可以是在 Linq-to-entities 中允许的 String.Concat:

    var query = DbContext.Customers
                         .Where(p => String.Concat(p.FirstName, " ", p.LastName)
                                           .Contains(search));
    

    【讨论】:

    • 我尝试在部分类中添加 FullName 属性,然后使用您的 String.Concat 版本而不是仅组合字符串,遗憾的是我仍然得到一个“linq 不支持类型成员 FullName- to-entities”有什么方法可以让它工作吗?
    • @Mvision:不能在 L2E 中使用非映射属性。
    • @LadislavMrnka 有没有一种简单的方法可以只加入非空值以避免不必要的额外空格?例如。假设您有一个可选的中间名,并且您不想要两个空格。
    【解决方案2】:

    您可以使用数据库中的计算列并将其映射 例如

    alter table Customer add FullName AS FirstName + ' ' + LastName
    

    (我不知道)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      相关资源
      最近更新 更多