我有一個項目,要求我做這樣的BIG搜索引擎,但這都是動態的。我的意思是我可以有大約0到9個主要的「組」,它們在內部具有諸如「OR」或「AND」的「where」的無限可能性。我們首先想到的是使用Dynamic Linq,它爲構建動態查詢提供了一個很好的選擇。所有這些使用EF與自制包裝。集合上的動態LINQ?
問題: 我無法訪問「收集」。我的意思是,我可以很容易地訪問一個引用的對象(如Customer.State.StateName =「New-York」或Custoemr.State.StateName =「Quebec」),但我找不到方法來訪問類似:「Customer.Orders.OrderID = 2或Customer.Orders.OrderID = 3」。我可以很容易地弄清楚它是因爲它的一個集合,但我怎麼能做到這一點?
請幫我一把!
**對不起,我的英語!
更新
我不清楚足夠多的,我認爲,對不起它由於IM法國...
我的問題了,因爲沒有什麼是一成不變的。它是一個候選人搜索引擎,用於將候選人放入企業中的recaruting compagny。在經理可以搜索候選人的頁面中,他可以通過以下方式「解析」:域名(工作),城市或許多其他用戶在註冊時填寫的內容。所有這些格式(如果它在SQL中):
WHERE(domaine.domainID = 3或domaine.domainID = 5或domaine.domainID = 23)AND(cities.cityID = 4,cities 。市= 32)[...]
所以無法與正常LINQ格式像這樣做:
Candidat.Domaines.Where(domain => domain.DomainID == 3 || domain.DomainID == 5 || domain.DomainID == 23);
即使是在操作者paretheses是動態的( 「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更多「可能」添加的東西搜索...任何想法?
非常感謝。它不完全是我所期望的,但它看起來很棒。我仍然需要一點點才能使它完美動態。但是,非常感謝,非常有用。 – 2009-08-20 14:58:01