EntityFramework: добавить предложение Where в ObjectSet Query для выбора по атрибутам CHILD - PullRequest
1 голос
/ 03 ноября 2011

Цель состоит в том, чтобы вернуть список сущностей РОДИТЕЛЕЙ на основе атрибутов их РЕБЕНОК ЛИЦ

Например, найдите мне все ЗАМКИ, где LADIES_IN_WAITING принадлежат PRINCESS 'X'

Я хочу сделать что-то вроде этого:

var query = ObjectSet.Include(c => c.LADIES_IN_WAITING);
query = query.Where(p => p.REGION.ToLower().Contains("shrekVille"));
query = query.Where(p => p.LADIES_IN_WAITING.Where(c => c.PRINCESS.Equals("fiona")));
var results = query.ToList();

Это, очевидно, неправильный синтаксис, но я не могу найти каких-либо четких примеров того, как структурировать запрос.

Я сейчас прибегаю к чему-то вроде этого:

var query = ObjectSet.Include(c => c.LADIES_IN_WAITING);
query = query.Where(p => p.REGION.ToLower().Contains("shrekVille"));

// Get the results from the DB using the query built thus far
var results = query.ToList();

// Now filter the list in memory manually
foreach (var castle in results)
{
    var matchingParents = new List<CASTLE>();
    var matchingChildren = castle.LADIES_IN_WAITING.Where(a => a.PRINCESS.Equals("fiona"));
    if (matchingChildren.Count() > 0) 
        matchingParents.Add(matchingChild);
}
results = matchingParents;

Любые предложения о том, как правильно построить Запрос, будут приветствоваться!

1 Ответ

1 голос
/ 04 ноября 2011

Возможно, вы захотите использовать оператор Any . Он возвращает true, если один элемент в коллекции (т. Е. «Любой» из них) удовлетворяет предикату.

var query = ObjectSet.Include(c => c.LADIES_IN_WAITING); 
query = query.Where(p => p.REGION.ToLower().Contains("shrekVille")); 

// filter the query where, for each p, 
// any of the LADIES_IN_WAITING have PRINCESS.Equals("fiona") == true
query = query.Where(p => p.LADIES_IN_WAITING.Any(c => 
    c.PRINCESS.Equals("fiona"))); var results = query.ToList(); 

Дополнительным оператором является All, который фильтрует ваш запрос по тем результатам, у которых все LADIES_IN_WAITING, удовлетворяющих критериям PRINCESS.Equals("fiona").

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