1

これを検索してみましたが、これを理解するために使用する LINQ クエリに一致するものが見つからないようです。

デバッガーの [結果ビュー] -> [ベース オブジェクト] にメッセージが表示されます

+base {"'System.Object' 型の定数値を作成できません。このコンテキストでは、プリミティブ型または列挙型のみがサポートされています。"} System.SystemException {System.NotSupportedException}

これが私のLINQクエリです(LINQPadで結果を返します...):

public IEnumerable<PendingItems> GetHazmatPendingShipping()
{
    var pending = context.HazmatInfoes
                         .Where(h => (h.ShippingFlag.Equals(false) && (h.ShippingType.Equals("Manual"))))
                         .GroupBy(x => new {x.ToBU, x.FromBU}, y => new {y})
                         .Select(p => p);
    return pending;
}

戻り値の型が間違っていることはわかっています。このクエリが結果を返さない理由を理解した後、それに取り組みます。

この問題に対する私の答え:

複合 {string, string} のキーを持っていたので、PendingItems というクラスを作成する必要がありました。

public IQueryable<PendingItems> GetHazmatPendingShipping()
    {
        IQueryable<PendingItems> pending = context.HazmatInfoes
            .Where(h => ((h.ShippingFlag.Value == false && h.ShippingType.Equals("Manual"))))
            .GroupBy(x => new {x.ToBU, x.FromBU}, y => y)
            .Select(p => new PendingItems {ToBu = p.Key.ToBU, FromBu = p.Key.FromBU, Items = p});
        return pending;
    }

PendingItems クラス:

using System.Collections;
using System.Collections.Generic;

namespace Hazmat.Models
{
    public class PendingItems : IEnumerable
    {
        public string ToBu { get; set; }
        public string FromBu { get; set; }
        public IEnumerable<HazmatInfo> Items { get; set; }

        public IEnumerator GetEnumerator()
        {
            yield return this.Items;           
        }
    }
}

ありがとう、ティム

PSこの回答はこの問題に役立ちました: https://stackoverflow.com/a/1775514/2733668

4

1 に答える 1

2

このエラーは、Nullable<>フィールドに関する条件があり、比較がそれを反映していない場合に発生します。次に、プリミティブ(falseあなたの場合)がNullable<>オブジェクトに変換され、例外が発生します。

おそらくShippingFlagタイプは でNullable<bool>あり、条件を次のように書き直す必要があると仮定します。

var pending = context.HazmatInfoes
    .Where(h => (!h.ShippingFlag.HasValue && h.ShippingFlag.Value.Equals(false)) && h.ShippingType.Equals("Manual"))
于 2013-10-17T07:08:08.273 に答える