#linq
#linq
Вопрос:
Я сформировал следующий запрос LINQ, но он выдает ошибку
mcc_season не является атрибутом в mcc_product
Как мне сформировать запрос, в котором у меня есть 2 WHERE
условия, и оба из разных объектов в соединении
var guestCardProduct =
(from c in CrmOrgServiceContext.mcc_productpriceSet
join d in CrmOrgServiceContext.mcc_productSet
on c.mcc_product.Id equals d.mcc_productId
where d.mcc_producttype.Value == (int)mcc_product.mcc_producttypeOptionSet.GuestCard
amp;amp; c.mcc_season.Id == seasonId
select new
{
d.mcc_productId,
c.mcc_price
}).FirstOrDefault();
Комментарии:
1. Совсем не ясно, в чем здесь проблема, потому что вы не сказали нам, что вы на самом деле пытаетесь сделать, или как выглядят ваши сущности. Этот запрос должен быть в порядке, если
mcc_season
действительно является свойством любого типаc
, но мы не знаем задействованных типов — и я склонен доверять компилятору. Пожалуйста, прочитайте tinyurl.com/so-hints2. Вы уверены, что в нем не указано «mcc_season не является атрибутом в mcc_productpriceSet»? Есть ли у вас сопоставление внешнего ключа между mcc_season и mcc_productPriceSet?
3. В качестве дополнительного замечания, не называйте свои переменные
c
иd
.4. Я полагаю, вы программируете на C #?
Ответ №1:
Возможно, вы сможете переписать его следующим образом:
var guestCardProduct =
(from c in CrmOrgServiceContext.mcc_productpriceSet
where c.mcc_season.Id == seasonId
join d in CrmOrgServiceContext.mcc_productSet
on c.mcc_product.Id equals d.mcc_productId
where d.mcc_producttype.Value == (int)c.mcc_product.mcc_producttypeOptionSet.GuestCard
select new
{
d.mcc_productId,
c.mcc_price
}).FirstOrDefault();
Здесь мы предполагаем, что между mcc_productpriceSet и mcc_season и mcc_product существует связь 1 — 0 ..1, а также связь 1 — 0..1 между mcc_product и mcc_producttypeOptionSet . Если у вас есть 1-n отношений между любым из них, то вам придется работать с этими отношениями, а не расставлять точки в одном свойстве, потому что у вас будут коллекции дочерних объектов, а не один дочерний объект. Возможно, вам будет полезно разбить ваш запрос на более мелкие части, чтобы сузить источник проблемы.