C# Linq,array.Contains()生成异常:在此上下文中仅支持基本类型(';如Int32、String和Guid';)

C# Linq,array.Contains()生成异常:在此上下文中仅支持基本类型(';如Int32、String和Guid';),c#,entity-framework,linq,C#,Entity Framework,Linq,我正在尝试使用Linq执行查询,这是我的新手。 我想接收一个ID数组,并用这些ID检索产品。我得到的linq查询是: public Product[] RetrieveProduct(int[] ids) { var query = from productInfos in productRepository.Table where (ids.Contains(productInfos.Id))

我正在尝试使用Linq执行查询,这是我的新手。 我想接收一个ID数组,并用这些ID检索产品。我得到的linq查询是:

    public Product[] RetrieveProduct(int[] ids)
    {
        var query = from productInfos in productRepository.Table
                    where (ids.Contains(productInfos.Id))
                    && productInfos.Active
                    select new ProductIndiInfo
                    {
                        ProductId = productInfos.Id,
                        CurrentPrice = productInfos.CurrentPrice
                    };
        return query.ToArray();
    }
但我一直收到一个著名的例外:

{“无法创建'System.Int32[]'类型的常量值。仅限” 中支持基元类型(“如Int32、字符串和Guid”) 这是上下文

我读到的一些资料说它不可用。但其他一些人告诉我这应该有效。 我在这里和博客上看到过很多有备选方案的帖子,但都不起作用。我开始认为这是一个语法问题

我也尝试过这种方法:

 var query = from productInfos in pricingInfoRepository.Table
                    where ids.Any(id => id == productInfos.ProductId)
                    && productInfos.Active
                    select new PricingInfo
                    {
                        ProductId = productInfos.Id,
                        CurrentPrice = productInfos.CurrentPrice
                    };
        return query.ToArray();
但我也有同样的问题

有人能告诉我我的语法是错的还是真的是Linq问题吗?(不支持操作?)

如何找出我使用的EF版本

更新:据我所知,关于ids.Contains()的这个问题将是一个L2S问题,但是可能的回答是EF2不支持它。
我理解正确吗?

实体框架仅开始支持EF 4.0中针对数组的
Contains
。您可以通过构建一个
表达式
来包含或条件列表

ps:我如何知道我使用的是哪个EF版本


检查
System.Data.Entity
程序集的版本。有关详细信息,请参阅。

假设
PricingForepository
是您的对象上下文或返回相关对象集的存储库类,这可能会起作用(这是查询的方法语法版本,稍作调整):


您正在对
int
s数组调用
Contains()
,LINQ将其视为
IEnumerable
,这应该可以。我以前使用过类似的查询,没有任何问题…

@pst是的-但是文本指定了“哪个EF版本”-不确定。@pst我相信这是EF 1错误消息,而L2Q有不同的错误IIRC@ReedCopsey系统数据实体v4.0.30319。我应该能够执行ids.Contains()操作,对吗?有语法错误吗?@Oscar没有-你所拥有的应该可以工作,但正如你所看到的,它不能是
null
。这是真的。这是一个新手的错误,但也许错误信息可以更具体一些。感谢您的帮助如果EF而不是L2S,请重新标记:它们是两种不同的产品。如果是EF,请包括引用的程序集的版本号。(查看引用程序集的属性。)@pst请验证编辑,我应该如何继续?刚刚发现。。。由于某种原因,ids为null,这是导致错误的原因
 var query = pricingInfoRepository.Table
            .Where(pi => pi.Active && ids.Contains(pi.Id))
            .Select(pi => new PricingInfo
            {
                ProductId = pi.Id,
                CurrentPrice = pi.CurrentPrice
            })
            .ToArray();