Службы данных не поддерживают создание SelectMany с последующим выбором, если вы не включите ключевой селектор, чтобы отфильтровать «Много» обратно только к одному элементу.
Если вы думаете о запросах с точки зрения URI, вы поймете, почему.
В URI OData у вас должен быть только один объект, прежде чем вы перейдете (т.е. /NavigationProperty).
Итак, это:
~/Users(123)/ConsumerXRef
хорошо, потому что у вас есть один пользователь (123), прежде чем вы получите множество связанных ConsumerXRef (s).
Однако это не хорошо:
~/Users(123)/ConsumerXRef/Account
потому что вы не идентифицируете ни одного ConsumerXRef
до перехода к учетным записям.
Когда вы переносите это мышление на землю LINQ, что-то вроде этого:
from u in ctx.Users
where u.ID == 123
from c in u.ConsumerXRef
select c;
все в порядке, потому что это примерно означает:
~/Users(123)/ConsumerXRef
Но это:
from u in _gsc.Users
where u.UserId == myId
from c in u.ConsumerXref
where c.AccountName == "MyAccount" && c.IsActive
select x.Account;
не годится, потому что - я думаю, здесь - AccountName
не ключ? так что это означает что-то вроде этого URL
~/Users(123)/ConsumerXRef/Account/?$filter=AccountName eq 'MyAccount' ...
, что недопустимо, потому что вы перешли (от ConsumerXRefs к их учетным записям) без предварительного выбора конкретного ConsumerXRef.
Имеет ли это смысл?
Надеюсь, так
Alex