1

次のコードフラグメントがあります

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,
                                               };

可用性行の最初のバージョンのコメントが外されたとき、それはタイプではないArgumentExceptionと言ってを受け取りました。プロパティと関係があると思いました(ただし、DBには値がありません)。製品の数量をチェックしない 2 番目のバージョンは、同じ例外をスローします。valueEdm.Int32prodotto.disponibilitaint?null

可用性設定の 2 番目のバージョンにコメントを付けて初めて、コードが最終的に機能し、式が評価されました。

列挙型は次のように定義されます。

  [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,
    }

enumLINQ select ステートメントでのプロパティの設定について知っておくべきことはありますか?

4

1 に答える 1

4

LINQ select ステートメントで列挙型プロパティを設定することについて知っておくべきことはありますか?

はい。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,
                                               });
于 2012-05-23T13:57:40.450 に答える