我有一个项目要求我做一个这么大的搜索引擎,但它都是动态的。我的意思是我可以有大约 0 到 9 个主要的“组”,它们内部有无限的可能性,比如用“OR”或“AND”来“在哪里”。我们首先想到的是使用 Dynamic Linq,它为构建动态查询提供了一个很好的替代方案。所有这些都使用带有自制包装器的 EF。
问题:我无法访问“收藏”。我的意思是,我可以轻松访问引用的对象(如Customer.State.StateName = "New-York" OR Custoemr.State.StateName = "Quebec"),但我找不到访问类似的方法:" Customer.Orders.OrderID = 2 或 Customer.Orders.OrderID = 3"。我可以很容易地弄清楚这是因为它是一个集合,但我该怎么做呢?
请帮帮我!!
** 对不起我的英语不好 !!
更新
我不清楚我认为,对不起,因为我是法国人......
我的问题是因为没有什么是静态的。它是招聘公司的候选人搜索引擎,可将候选人放入企业。在经理可以搜索候选人的页面中,他可以通过以下方式“解析”:域(工作)、城市或许多其他用户在注册时填写的内容。所有这些都是格式(如果它是在 SQL 中):
[...] WHERE(domaine.domainID = 3 或 domaine.domainID = 5 或 domaine.domainID = 23)和(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 个“可能”添加的东西要搜索......有什么想法吗?