私は、そのような大きな検索エンジンを実行するように依頼するプロジェクトを持っていますが、それはすべて動的です。つまり、「OR」または「AND」を使用した「どこで」の無限の可能性を内部に持つメインの「グループ」を 0 ~ 9 個ほど持つことができるということです。最初に考えたのは、動的クエリを作成するための優れた代替手段を提供する Dynamic Linq を使用することでした。これらはすべて自家製のラッパーで EF を使用しています。
問題: 「コレクション」にアクセスできません。つまり、参照されたオブジェクト ( Customer.State.StateName = "New-York" OR Custoemr.State.StateName = "Quebec"など) に簡単にアクセスできますが、次のようなものにアクセスする方法が見つかりません: " Customer.Orders.OrderID = 2 OR Customer.Orders.OrderID = 3" . これはコレクションなので簡単に理解できますが、どうすればよいですか?
私を助けてください!!
**私の英語でごめんなさい!!
アップデート
私は十分にはっきりしていないと思います。申し訳ありませんが、私はフランス人です...
私の問題は、静的なものがないためです。候補者を企業に配置する求人企業の候補者検索エンジンです。マネージャーが候補者を検索できるページで、ドメイン (ジョブ)、都市、またはユーザーが登録時に入力したその他の多くによって「解析」できます。これはすべてフォーマットされています(SQLの場合):
[...] WHERE (domaine.domainID = 3 OR domaine.domainID = 5 OR domaine.domainID = 23) AND (cities.cityID = 4, citys.city = 32) [...]
したがって、次のような通常のLINQ形式ではこれを行うことはできません:
Candidat.Domaines.Where(domain => domain.DomainID == 3 || domain.DomainID == 5 || domain.DomainID == 23);
括弧内の演算子も動的 (「AND」または「OR」) です。そのため、より柔軟な Dynamic Linq を使用しようとしています。
私の問題をより簡単に理解できることを願っています...
更新2 これが私の方法です
private string BuildDomainsWhereClause() {
StringBuilder theWhere = new StringBuilder();
if (this.Domaines.NumberOfIDs > 0) {
theWhere.Append("( ");
theWhere.Append(string.Format("Domaines.Where( "));
foreach (int i in this.Domaines.ListOfIDs) {
if (this.Domaines.ListOfIDs.IndexOf(i) > 0) {
theWhere.Append(string.Format(" {0} ", this.DispoJours.AndOr == AndOrEnum.And ? "&&" : "||"));
}
theWhere.Append(string.Format("DomaineId == {0}", i));
}
theWhere.Append(" ))");
}
return theWhere.ToString();
}
「ブール値を返さない」代わりにうまく機能します。では、どうすればいいですか?エラー : 「型 'Boolean' の式が必要です」。
最後に、「( Domaines.Where( DomaineId == 2 && DomaineId == 3 && DomaineId == 4 && DomaineId == 5 ))」のようなものを返します。私のLINQクエリに追加されます:
var queryWithWhere = from c in m_context.Candidats.Where(WHERE)
select c;
7 つまたは 8 つの「可能な」検索項目が追加されていることを忘れないでください。何かアイデアはありますか?