首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF6异常: DbExpressionBinding需要一个带有集合ResultType的输入表达式

EF6异常: DbExpressionBinding需要一个带有集合ResultType的输入表达式
EN

Stack Overflow用户
提问于 2018-03-06 05:20:43
回答 1查看 999关注 0票数 4

当我运行这个查询(使用LinqPad进行调试)时,我面临一个异常:

代码语言:javascript
复制
int[] serviceCodes= new int[] { 1610, 1611, 1612 };
byte[] payModes = new byte[] { 1, 2 };
int[] months = new int[] { 10, 11, 12 };
int year = 2017;

using (var context = new FinanceConnection())
{
   var result = from a in
            (from a in context.BILL_INFO_DETAILS
             where
                 a.INPUT_STATUS == true &&
                 serviceCodes.Contains(a.SERVICE_INFO.SERVICE_CODE) &&
                 payModes.Contains(a.PAY_MODE_ID) &&
                 a.STAMP_DATE != null &&
                 months.Contains(a.STAMP_DATE.Value.Month) &&
                 a.STAMP_DATE.Value.Year == year &&
                 a.SERVICE_INFO.FEE > 1
             select new
             {
                 a.REQUESTED_QTY,
                 a.ITEM_TOTAL,
                 Dummy = "x"
             })
             group a by new { a.Dummy }
        into g
             select new ViewGuessAlMajlisOffline
             {
                 Transaction =
                     g.Sum(p => p.REQUESTED_QTY) == 0 ? (int?)null : (int)g.Sum(p => p.REQUESTED_QTY),
                 Income = g.Sum(p => p.ITEM_TOTAL) == 0
                     ? (decimal?)null
                     : (decimal)g.Sum(p => p.ITEM_TOTAL)
             }; 

    result.Dump();
}

我用相同的标题搜索了SO问题,但是我的包含列表是简单的数组,所以我不知道是什么导致了异常。

任何指示都会受到高度赞赏。

更新

我已经尝试删除where和查询中的两个.Contains()。实际上,只有注释payModes.Contains(a.PAY_MODE_ID)才能使查询工作

更新

代码语言:javascript
复制
public partial class BILL_INFO_DETAIL : DA.Services.IBS.Data.EntityFramework.Helper.IBaseEntity
{
    public string BILL_NO { get; set; }
    public byte PAY_MODE_ID { get; set; }
    public int CASHIER_NO { get; set; }
    public int SERVICE_CODE { get; set; }
    public Nullable<int> REQUESTED_QTY { get; set; }
    public Nullable<int> CURRENT_QTY { get; set; }
    public Nullable<decimal> FEE { get; set; }
    public Nullable<decimal> ITEM_TOTAL { get; set; }
    public Nullable<decimal> VAT_AMOUNT { get; set; }
    public string USER_ID { get; set; }
    public Nullable<int> BUSINESS_USER_ID { get; set; }
    public Nullable<bool> INPUT_STATUS { get; set; }
    public Nullable<System.DateTime> STAMP_DATE { get; set; }

    public virtual BUSINESS_USER BUSINESS_USER { get; set; }
    public virtual CASHIER CASHIER { get; set; }
    public virtual PAY_MODE PAY_MODE { get; set; }
    public virtual SERVICE_INFO SERVICE_INFO { get; set; }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-06 08:54:07

在将Contains方法转换应用于byte数组时(在EF6.1.3和6.2中)似乎存在一个错误(可能是因为字节数组通常用于表示二进制数据)。

解决方法是使用int数组:

代码语言:javascript
复制
var payModes = new int[] { 1, 2 };

或显式可枚举(以避免byte[]特殊处理):

代码语言:javascript
复制
var payModes = new byte[] { 1, 2 }.AsEnumerable();

请注意,向可枚举的转换应该在查询表达式树之外,因为EF查询转换器无法识别AsEnumerable()调用,因此将生成NotSupportedException

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49123858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档