Hi John,
You are almost there. You just need to add a relation so the filter on the related entity is recognized:
var prefetchPath = new PrefetchPath2(EntityType.StringResourceEntity);
prefetchPath.Add(StringResourceEntity.PrefetchPathStringResourceValues);
var bucketContainer = new RelationPredicateBucket();
bucketContainer.PredicateExpression.Add(StringResourceFields.Container == container);
bucketContainer.PredicateExpression.Add(StringResourceValueFields.Culture == culture);
bucketContainer.Relations.Add(StringResourceEntity.Relations.StringResourceValueEntityUsingStringResourceID);
// ...
The thing is: What do you want of these options?:
a. Filter the main collection (StringResource) using the Container field, and for each StringResource, fetch the childs (StringResourceValue) filtered by the Culture field.
b. Filter the main collection (StringResource) using the Container filed and a related field (StringResourceValue.Container). And for each StringResource fetch all its childs (StringResourceValue).
What you are doing right now is option (a). If you want (b) you should move the (StringResourceValueFields.Culture == culture) to the prefetchPath predicate, there is a prefetchPath constructor for that.
So, adding a relation is different that adding a prefetchPath. More about this at http://www.llblgening.com/archive/2009/10/prefetchpaths-in-depth/