Linq - возврат родительского элемента, когда элемент в коллекции имеет свойство, соответствующее строке - PullRequest
1 голос
/ 04 августа 2011

У меня есть метод, который проходит vehicleID - мне нужно получить все SalesChannels, которые содержат этот автомобиль.У SalesChannels есть IEnumerable SalesChannelVehicle, у которого есть свойство с именем VehicleID.

. Я пробовал это, но он возвращает все SalesChannels, а не только тот, который, как я знаю, мойin!

var queryable = Session.Linq<SalesChannel>();
queryable.Where(y => y.SalesChannelVehicle.Any(z => z.VehicleId == vehicleId));

Может кто-нибудь помочь, пожалуйста?Я использую NHibernate, хотя я сомневаюсь, что это имеет большое значение для этой проблемы.

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Я считаю, что вы должны присвоить возвращаемое значение чему-то, поэтому есть что-то вроде:

var queryable = Session.Linq<SalesChannel>();
var results = queryable.Where(y => y.SalesChannelVehicle.Any(z => z.VehicleId == vehicleId));

РЕДАКТИРОВАТЬ KeithS: Разница между этим и ОП заключается в том, что *Переменная 1006 * теперь содержит IQueryable, который включает дополнение метода Where () к дереву выражений.Простой вызов методов queryable не обновляет дерево выражений queryable на месте;Вы должны назначить расширенное дерево где-нибудь.Если вы хотите, чтобы queryable включил предложение Where (), вы можете просто присвоить этой же переменной:

var queryable = Session.Linq<SalesChannel>();
queryable = queryable.Where(y => y.SalesChannelVehicle.Any(z => z.VehicleId == vehicleId));

Вы также можете встроить вызов метода Where ():

var queryable = Session.Linq<SalesChannel>().Where(y => y.SalesChannelVehicle.Any(z => z.VehicleId == vehicleId));
0 голосов
/ 04 августа 2011
var results =
    from channel in Session.Linq<SalesChannel>()
    from vehicle in channel.SalesChannelVehicle
    where vehicle.VehicleId == vehicleId
    select channel;

(при условии, что каждое транспортное средство появляется только 1 раз в SalesChannelVehicle)

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