【问题标题】:LINQ to Entities does not recognize the method '<>f__AnonymousType4`1[System.String] get_Item(Int32)'LINQ to Entities 无法识别方法“<>f__AnonymousType4`1[System.String] get_Item(Int32)”
【发布时间】:2020-08-03 21:40:48
【问题描述】:

请我正在使用 Entity Framework 处理 ASP.NET MVC 项目,我尝试使用此查询但出现错误。

查询:

var R = (from A in SCHOOL_DB_Context.Con.ABS where A.STG_ABS == STG && (A.DT_ABS.Month + "/" + A.DT_ABS.Year) == MONTHS[i].MONTH && A.DT_ABS.Hour == Hour select A).ToList();

错误:

LINQ to Entities 无法识别该方法 'f__AnonymousType4`1[System.String] get_Item(Int32)' 方法,以及 此方法无法转换为商店表达式。

完整代码为:

    var MONTHS = (from A in SCHOOL_DB_Context.Con.ABS where A.STG_ABS == STG && A.DT_ABS.Hour == Hour group A by A.DT_ABS.Month + "/" + A.DT_ABS.Year into G select new { MONTH = G.Key }).ToList();

    List<DataPoint> DATA = new List<DataPoint>();

    List<DataPoint> DTP = new List<DataPoint>();

    if (MONTHS.Count == 0)
    {

        DTP.Add(new DataPoint(null, null));

    }
    else
    {

        for (int i = 0; i < MONTHS.Count; i++)
        {

            var R = (from A in SCHOOL_DB_Context.Con.ABS where A.STG_ABS == STG && (A.DT_ABS.Month + "/" + A.DT_ABS.Year) == MONTHS[i].MONTH && A.DT_ABS.Hour == Hour select A).ToList();

            int Count = 0;

            Count = R.Count;


            //DATA.Add(new DataPoint(MONTHS[i].MONTH, Count));



            DTP.Add(new DataPoint(MONTHS[i].MONTH, Count));

        }

    }

请帮忙解决这个问题?

【问题讨论】:

  • 您能否尝试将 MONTHS[i].MONTH 中的值提升到循环内的临时变量中,并在查询中使用该变量?
  • 该错误表示 EF 不知道如何将MONTH[i] 转换为 SQL。此外,按照您的操作方式,您访问数据库的次数可能与MONTHS 一样多,因此它可能会变得非常慢。尝试在一次行程中将整个查询作为一个查询进行。使用 LINQ to EF 查看子查询。或者至少使用Contains,然后您将只进行 2 次旅行。

标签: c# asp.net-mvc entity-framework linq


【解决方案1】:

尝试将索引器从辅助查询中拉出来:

 var month = MONTHS[i].MONTH;

 var R = (from A in SCHOOL_DB_Context.Con.ABS  
          where A.STG_ABS == STG 
             && (A.DT_ABS.Month + "/" + A.DT_ABS.Year) == month 
             && A.DT_ABS.Hour == Hour
          select A).ToList();

在将月份和年份连接为字符串时,您可能仍会遇到错误 - 如果您这样做,我的下一个建议是在 MONTHS 查询中分别提取月份和年份,并独立比较这两个值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2019-08-18
    • 1970-01-01
    相关资源
    最近更新 更多