как получить список linq, имеющий идентификаторы из IEnumerable <Object> - PullRequest
0 голосов
/ 20 апреля 2020

Код ниже userModel.Carriers является типом IEnumerable<CarrierModel>. userModel.Carriers имеет список перевозчиков, имеющих идентификаторы. С этими идентификаторами я хочу, чтобы CarrierDivision использовала linq. Но я не могу понять это правильно, потому что linq sqlexpression is not compatible with IEnumerable expression.

userModel.Carriers = carriersForRegion.Select(carrier => Mapper.Map<CarrierModel>(carrier))
                    .ToList();

var carrierDivision = from c in db.CarrierDivision where c.Contains();

1 Ответ

1 голос
/ 20 апреля 2020

collection.Contains сгенерирует .. WHERE CarrierId IN (1, 2, 3) sql запрос

var carrierIds = userModel.Carriers.Select(carrier => carrier.Id).ToArray();

var divisions = db.CarrierDivision
    .Where(division => carrierIds.Contains(division.CarrierId))
    .ToArray();

В случае, если db.CarrierDivision вернет IEnumerable (не база данных), я бы предложил создать HashSet идентификаторов операторов ,

var carrierIds = userModel.Carriers.Select(carrier => carrier.Id).ToHashSet();

var divisions = db.CarrierDivision
    .Where(division => carrierIds.Contains(division.CarrierId))
    .ToArray();

При HashSet поиск выполняется без дополнительных перечислений - O (1)

...