使用GroupBy的LINQ查询导致“无法创建类型'System.Object'的常量值...”

时间:2013-10-16 19:27:48

标签: c# linq igrouping

我尝试搜索这个,但似乎找不到任何与我的LINQ查询相匹配的东西来帮我解决这个问题。

我在Results View->基础对象

中的调试器中收到一条消息
  

+ base {“无法创建类型'System.Object'的常量值。   此处仅支持原始类型或枚举类型   context。“} 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;           
        }
    }
}

谢谢, 添

P.S。这个答案有助于解决这个问题:https://stackoverflow.com/a/1775514/2733668

1 个答案:

答案 0 :(得分: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"))