0

LinqKits PredicateBuilder を使用して、ユーザーがテキスト ボックスに検索語を入力し、2 つのデータベース テーブル/エンティティ セットからレコードを返せるように必死に試みていますが、どこにでも行くのに苦労しています。(単純化された) データベース構造は次のとおりです。

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

したがって、各人は 0 個のエイリアスを持つことも、複数のエイリアスを持つこともできます。私がやろうとしているのは、ユーザーが名前を検索し、その名前が Person テーブルまたは Alias テーブルの名前と一致する Person テーブルから行を引き戻すことです。これまでのところ、私は持っています:

        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 に変換しようとしているため、これは機能しません。基本的に、私は完全に立ち往生しており、2 つの異なるテーブルに対して Or クエリを実行できるかどうかさえわかりません (?)

4

1 に答える 1

1

私はいくつかの可能な解決策を考えることができます:

  1. エイリアステーブルに各人のプライマリ名を含め、エイリアステーブルで検索するか、または
  2. 検索の前に2つのテーブルを一緒にUNIONする、または
  3. AliasテーブルをPersonテーブルに外部結合するLinqクエリを実行し、OR条件を含む結果を検索に使用します
于 2009-09-21T15:53:36.260 に答える