【问题标题】:.Contains() on 2 properties in EF Code First.Contains() 在 EF Code First 中的 2 个属性上
【发布时间】:2012-08-01 21:07:38
【问题描述】:

是否可以在 Where() 中查询两个不同的属性?例如,我想获取在 FirstName 和 LastName 属性中包含“Robert G”的所有用户。如果我这样做:

var contacts = _session.All<Contact>()
    .Where(x => x.IsActive
                && (x.FirstName.ToLower().Contains(q.ToLower())
                    || x.LastName.ToLower().Contains(q.ToLower())));

我不会得到“Robert G”的结果,因为 FirstName 包含“Robert”和 LastName “Gambonni”。

我还考虑过创建一个新属性 FullName ,它只是一个 Getter,但我必须先加载它们,因为我的属性不在数据库中。

有什么建议吗?非常感谢!

【问题讨论】:

  • 听起来有人在他们的模型中有错误的数据 :-) “罗伯特 G” 是一个有效的名字吗?姓?如果没有,不让,那就别看。
  • 或者这是一个更普遍的问题:如何在不需要额外模型加载的情况下查询计算值?例如(FirstName + " " + LastName).Contains("Robert G"),其中 FistName 和 LastName 可能是特定记录的“Robert”和“Gambonni”..
  • 它用于为大量联系人进行自动填充,因此如果客户可以同时输入名字和姓氏来过滤可能性,客户将更容易找到联系人
  • 另一种方法(除了计算形式)是拆分用户输入,例如“FirstName LastName”,然后在搜索适用字段时使用每个部分。当然“FirstOrLastName”也需要考虑。
  • 如果拆分,中间名会有问题。我有 4 个名字的同事。

标签: c# linq entity-framework-4 ef-code-first


【解决方案1】:

怎么样:

var contacts = _session.All<Contact>()
    .Where(x => x.IsActive
                && ((x.FirstName.ToLower() + " " + x.LastName.ToLower()).Contains(q.ToLower())));

【讨论】:

  • 很明显...我需要休息一下!感谢您的快速回复!
猜你喜欢
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
相关资源
最近更新 更多