У меня есть следующие модели (комментарии определить поля внутри данного объекта)Linq GroupJoin выберите запрос
public class ServiceModel
{
public List<ShippingRequest> ShippingRequest { get; set; }
public QuotesResult QuotesResult { get; set; }
}
public class ShippingRequest
{
public Address Address { get; private set; } // AddressId
public List<ShippingPackage> ShippingPackages { get; private set; }
}
public class ShippingPackage
{
public Package Package { get; private set; } // PackageId
public List<ShippingItem> ShippingItems { get; private set; } // IsSkipped
}
public class QuotesResult
{
public List<Quote> Quotes { get; set; } // PackageId, Cost
}
Предположим, что я следующий ввод, мне нужно, чтобы получить список AddressID и соответствующее цитаты, относящиеся к этому адресу (через PackageId). Котировки уже заполнены в этот момент.
Quote.PackageId = Package.PackageId
ВХОД:
Предположим, что у меня есть следующий вход с тремя ShippingRequests
Address1 = {Package1, Package2, Package3}
Address2 = {Package5, Package8}
Address3 = {Package11, Package12}
Чтобы получить все котировки по данному адресу, мне нужно присоединиться PackageID из "Пакет "с PackageId от . Таким образом, я буду знать, что эта цитата принадлежит этому адресу.
Я пробовал это, но я получаю сообщение об ошибке:
var addrQuotes = ServiceModel.ShippingRequest
.GroupJoin(ServiceModel.QuotesResult.Quotes, c1 => c1.ShippingPackages
.SelectMany(y => y.Package.Id), c2 => c2.PackageId, (c1, c2) =>
new {
c1.Address.Id,
Quotes = c2.Select(e =>
{
e.Price = c1.ShippingPackages.Any(
x => x.ShippingItems.All(y => y.IsSkipped))
? 0
: e.Price + ExtraCost;
e.Provider = GetName(e.Code);
return e;
})
}).OrderBy(q => q.Id);
Одна икра в том, что мне также нужно проверить ShippingItems (ы), которые идут в комплекте. Если ВСЕ товары ShippingItems в ShippingPackage имеют логический флаг «IsSkipped», установленный в true, цена Quote должна быть установлена равной 0, в противном случае добавьте дополнительную цену в Quote.Price.
ВЫВОД:
Address1 = [Quote1, Quote20, Quote21, Quote50, ...]
Address2 = [Quote3, Quote100...]
Address3 = [Quote5, Quote33, Quote12]
Любая помощь очень ценится.
Но вы не присоединяетесь ни к чему. Мне нужно присоединиться к пакетам с котировками – BobSwanson
Я обновил свою публикацию, чтобы сделать соединение. – jdweng
это помогло. спасибо – BobSwanson