0

我拼命尝试使用 LinqKits PredicateBuilder 允许用户在文本框中输入搜索词并从两个数据库表/实体集中返回记录,但我很难找到任何地方。(简化的)数据库结构如下:

Person                Alias
------                ------
                      A_ID
P_ID ---------------< P_ID
P_FIRST_NAME          A_FIRST_NAME
P_SURNAME             A_SURNAME

因此,每个人可以有 0 个或多个别名。我想要做的是允许用户搜索名称并从 Person 表中拉回该名称与 Person 或 Alias 表中的名称匹配的行。到目前为止,我得到了:

        var peopleQuery = MainFrm.genesisContext.People.AsExpandable();
        var peoplePredicate = PredicateBuilder.True<Person>();

        var aliasQuery = MainFrm.genesisContext.Alias.AsExpandable();
        var aliasPredicate = PredicateBuilder.False<Alias>();

        if (!String.IsNullOrEmpty(txtFirstName.Text.Trim()))
        {
            peoplePredicate = peoplePredicate.And(p => p.P_FIRST_NAME == txtFirstName.Text);

            aliasPredicate = aliasPredicate.And(a => a.A_FIRST_NAME == txtFirstName.Text);

            peoplePredicate = peoplePredicate .Or(p => aliasPredicate);
        }

这不起作用,因为我正在尝试从 People 转换为 Alias。基本上我完全卡住了,不确定是否可以对两个不同的表进行 Or 查询(?)

4

1 回答 1

1

我可以想到几种可能的解决方案:

  1. 在 Alias 表中包含每个人的主要姓名,然后在 Alias 表中进行搜索,或者
  2. 在搜索之前将两个表联合在一起,或
  3. 运行将 Alias 表外部连接到 Person 表的 Linq 查询,并在搜索中使用结果,包括 OR 条件
于 2009-09-21T15:53:36.260 回答