2012-05-23 6 views
1

I 가용성 라인의 첫 번째 버전은 내 말은, ArgumentException있어 주석이었던 다음 코드수 없습니다

IQueryable<RssItem> rssItems = from prodotti prodotto in tuttiProdotti 
               join marca in tutteMarche on prodotto.marca equals marca.id 

               where prodotto.eliminato == 0 
               orderby prodotto.id ascending 
               select new GoogleShoppingRssItem 
               { 
                Author = AUTHOR, 
                //Availability = prodotto.disponibilita > 0 ? AvailabilityType.instock : AvailabilityType.outofstock, 
                //Availability = AvailabilityType.instock, 
                Title = prodotto.titolo, 
               }; 

을 가질 수 value 아니었다 유형 Edm.Int32의. int?prodotto.disponibilita 속성과 관련이 있다고 생각했지만 (DB에는 null 값이 없습니다). 두 번째 버전에서는 제품 수량을 확인하지 않고 동일한 예외가 발생합니다.

가용성 설정의 두 번째 버전을 주석 처리 한 후에 만 ​​코드가 최종적으로 작동하고 표현식이 평가됩니다. 내가 LINQ select 문에 enum 속성을 설정에 대해 알아야 할 무언가가

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] 
    [System.SerializableAttribute()] 
    [XmlType(Namespace="http://base.google.com/ns/1.0")] 
    [XmlRoot("availability", Namespace="http://base.google.com/ns/1.0", IsNullable=false)] 
    public enum AvailabilityType { 

     /// <remarks/> 
     [XmlEnum("in stock")] 
     instock, 

     /// <remarks/> 
     [XmlEnum("available for order")] 
     availablefororder, 

     /// <remarks/> 
     [XmlEnum("out of stock")] 
     outofstock, 

     /// <remarks/> 
     preorder, 
    } 

거기에 다음과 같이

열거 정의된다?

+0

가용성 구성원이 정수 또는 AvailabilityType 열거 형을 설정하고 있습니까? 또한 prodotto.disponibilita를 사용할 때> 0을 확인할 때 prodotto.disponibilita.Value를 사용해야합니다. – Josh

+0

가용성 유형이 AvailabilityType –

답변

4

LINQ select 문에서 enum 속성을 설정하는 방법에 대해 알아야 할 것이 있습니까?

예. EF4는 열거 형을 지원하지 않으므로 Linq-to-Entities 쿼리에서 사용할 수 없습니다. Linq-to-Objects 쿼리에서 사용할 경우 작동해야합니다.

IQueryable<RssItem> rssItems = (from prodotto in tuttiProdotti 
           join marca in tutteMarche on prodotto.marca equals marca.id 
           where prodotto.eliminato == 0 
           orderby prodotto.id ascending 
           select prodotto).ToList() // Now you switched to L2O 
           .Select(x => new GoogleShoppingRssItem 
               { 
                Author = AUTHOR, 
                Availability = x.disponibilita > 0 ? AvailabilityType.instock : AvailabilityType.outofstock, 
                Title = x.titolo, 
               }); 
+0

입니다. –