У меня есть проект, который просит меня сделать такую БОЛЬШУЮ поисковую систему, но которая динамична. Я имею в виду, что у меня может быть от 0 до 9 основных «групп», которые имеют внутри что-то вроде бесконечной возможности «где» с «ИЛИ» или «И». Первым делом мы решили использовать Dynamic Linq, который является хорошей альтернативой для построения динамического запроса. Все это с помощью EF с домашней оберткой.
Проблема :
Я не могу получить доступ к «Коллекции». Я имею в виду, что я могу легко получить доступ к указанному объекту (например, Customer.State.StateName = "New-York" ИЛИ Custoemr.State.StateName = "Quebec" ), но не могу найти способ доступ к чему-то вроде: "Customer.Orders.OrderID = 2 ИЛИ Customer.Orders.OrderID = 3" . Я могу легко понять это, потому что это коллекция, но как я могу это сделать?
Пожалуйста, помогите мне !!
** Извините за мой английский !!
Обновление
Я не достаточно ясно, я думаю, извините, потому что я французский ...
Моя проблема в том, что ничего не статично. Это поисковая система кандидатов для рекрутирующей компании, которая помещает кандидатов в предприятие. На странице, где менеджер может искать кандидата, он может «анализировать» по: домену (ам), городу (городам) или многим другим, которые пользователь заполнил при регистрации. Все это в формате (если бы это было в SQL):
[...] ГДЕ (domaine.domainID = 3 ИЛИ domaine.domainID = 5 ИЛИ domaine.domainID = 23) И (towns.cityID = 4, towns.city = 32) [...]
Так что я не могу сделать это с обычным форматом LINQ, например:
Candidat.Domaines.Where(domain => domain.DomainID == 3 || domain.DomainID == 5 || domain.DomainID == 23);
Даже оператор в паретезах является динамическим («И» или «ИЛИ»)! Вот почему мы пытаемся использовать 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();
}
Он отлично работает, вместо этого он не возвращает логическое значение. Так как я должен?
Ошибка: «Ожидается выражение типа« логическое »».
В конце он возвращает что-то вроде: «(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 "возможных" добавленных вещей для поиска в ... Есть идеи?