Соединение нескольких условий LINQ

#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-hints

2. Вы уверены, что в нем не указано «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 отношений между любым из них, то вам придется работать с этими отношениями, а не расставлять точки в одном свойстве, потому что у вас будут коллекции дочерних объектов, а не один дочерний объект. Возможно, вам будет полезно разбить ваш запрос на более мелкие части, чтобы сузить источник проблемы.