Предполагая, что все критерии в 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;
}
(не проверяется на синтаксис, просто показывает идею).
Не очень эффективно делать запросы таким способом, но запрос Модель сущности-атрибута-значения всегда является проблемой. Если даже удаленно возможно изменить таблицу имен таким образом, чтобы она включала столбцы, соответствующие именным свойствам, то сделайте это.