まず、動的 where 句、ScottGu のブログ、Albahari の PredicateBuilder クラスに関する多くのスレッドを検索して読みましたが、これらのメソッドを正しく適用する方法がわかりません。私の場合。どういうわけか、私はそれについて頭を包むことができません。
次のコードがあります。これは、次のように「静的に」実行すると機能します。
var persons = from father in fathers
select new
{
Count = father.Sons
.Select(son => son)
.Where(son => son.Skills.Any(skill => skill.SkillType == "Languages" && skill.Name == "French"))
.Where(son => son.Skills.Any(skill => skill.SkillType == "Sport" && skill.Name == "Football"))
.Count(),
Name = father.Name
};
ただし、実行時に where 句を生成したいと考えています。親オブジェクトには Son オブジェクトのコレクションがあり、さらに Son オブジェクトのコレクションには Skills オブジェクトのコレクションがあります。クエリが示すように、私は各父親の名前と、特定のスキル セットを持つ息子の数を知りたいと考えています。スキルのセットは実行時に選択されるため、この例ではスキルのセットが 2 つ (2 つの where 句) しかありませんが、実行時に 10 個または任意の数の句になる可能性があります。
私の最大の問題は、トップ レベル (父) からの情報だけでなく、第 3 レベル (スキル)第2レベル(息子)の情報に関するもの。
必要に応じて、明日試したことのサンプル コードを投稿します。ちょっと急いでいるので、今はできません。どんな助けでも大歓迎です。
編集:
必要なのは、ユーザーが選択したフィルター条件の数に応じて、実行時に where 句を連結する方法です。さまざまなフィルター条件が外部ソースから取得され、実行時に構築されます。たとえば、次のようになります。
シナリオ 1 では、ユーザーによって選択される 3 つの基準、たとえば、基準 1、基準 2、および基準 3 が存在する可能性があります。シナリオ 2 には、基準 1、基準 2、...、基準 5 などの 5 つの基準があります。3 番目のシナリオでは、10 個の基準 (たとえば、基準 1、基準 2、...、基準 10) を持つことができます。私が必要としているのは、3、5、10、またはその他の基準があるかどうかを事前に知らなくても、シナリオごとに次のことを実行できることです。
シナリオ 1:
var persons = from father in fathers
select new
{
Count = father.Sons
.Select(son => son)
.Where(criteria1)
.Where(criteria2)
.Where(criteria3)
.Count(),
Name = father.Name
};
シナリオ 2:
var persons = from father in fathers
select new
{
Count = father.Sons
.Select(son => son)
.Where(criteria1)
.Where(criteria2)
.Where(criteria3)
.Where(criteria4)
.Where(criteria5)
.Count(),
Name = father.Name
};
シナリオ 3:
var persons = from father in fathers
select new
{
Count = father.Sons
.Select(son => son)
.Where(criteria1)
.Where(criteria2)
.Where(criteria3)
.Where(criteria4)
.Where(criteria5)
.Where(criteria6)
.Where(criteria7)
.Where(criteria8)
.Where(criteria9)
.Where(criteria10)
.Count(),
Name = father.Name
};