Linq to EF Динамический поиск с несколькими свойствами - PullRequest
1 голос
/ 28 марта 2012

Учитывая следующее:

Таблицы SQL:

Names
-----
Id (int)
FirstName (varchar)
LastName (varchar)

NameProperties
----------
Id (int)
NameId (int) FK to Names Id
PropType (int)
PropValue (int)

Каждое имя может иметь несколько NameProperties

Теперь мой класс критерия поиска выглядит следующим образом

public string FirstName { get; set; }
public string LastName { get; set; }
public List<KeyValuePair<int,int>> Properties { get; set; } Corresponding to a list of PropType ProValue

Как выполнить поиск с использованием linq to EF при наличии нескольких значений PropType & PropValues?

1 Ответ

1 голос
/ 29 марта 2012

Предполагая, что все критерии в Properties должны быть выполнены (т.е. AND, а не OR), вы можете сделать это:

// c is a searchCriteria object.
var query = context.Names
    .Where(n => n.FirstName == c.FirstName && n.LastName == c.LastName);
foreach(var pair in c.Properties)
{
    query = query.Where(n => n.NameProperties.Any(np => 
        np.PropType == pair.PropType && np.PropValue == pair.PropValue;
}

(не проверяется на синтаксис, просто показывает идею).

Не очень эффективно делать запросы таким способом, но запрос Модель сущности-атрибута-значения всегда является проблемой. Если даже удаленно возможно изменить таблицу имен таким образом, чтобы она включала столбцы, соответствующие именным свойствам, то сделайте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...