【发布时间】: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