我有一个项目,要求我做这样的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