目标是根据其CHILD ENTITIES的属性返回一个PARENT实体列表
例如找到LADIES_IN_WAITING属于PRINCESS'X'的所有CASTLES
我想做这样的事情:
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;
欢迎任何关于如何正确构建查询的建议!
答案 0 :(得分:1)
您可能想要使用Any
operator。如果集合中的一个项(即“其中任何一个”)满足谓词,则返回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
,它会将您的查询过滤为 all 符合PRINCESS.Equals("fiona")
条件的LADIES_IN_WAITING的结果。