实体框架 - NotSupportedException

时间:2011-06-01 16:19:05

标签: asp.net entity-framework notsupportedexception

var depts = ctx.Departments
            .OrderBy(d => d.deptName)
            .Select(d => d.deptNo);

foreach (int deptNumber in depts) {
    var deptReports = from d in ctx.Departments
                      join r in matchingIncidents on d.deptNo equals r.deptNo
                      where r.deptNo == deptNumber
                      select r;

    int deptReportsCount = deptReports.Count();

我完全不知所措!关于这个错误的所有问题都说在原始字段(例如ID)上使用==,我正在做。我对此查询所做的任何操作都会生成异常。完全相同的代码之前工作,我不知道我做了什么!有人可以向我解释发生了什么事吗?

另外,我记得有一个EntityFramework类,其中的方法允许您在查询中转换对象(例如日期),有没有人知道这个类是什么?

更新:

以下是我所做的更改(现在可以使用)。

var deptReports = from r in matchingIncidents
                  join d in ctx.Departments on r.deptNo equals d.deptNo
                  where r.deptNo == deptNumber
                  select r;

2 个答案:

答案 0 :(得分:2)

matchingIncidents看起来像是复杂类型的本地集合(因为您使用的是r.deptNo)。 LINQ to Entities中不允许这样做。你可以试试这个:

foreach (int deptNumber in depts) {
    var deptReports = from d in ctx.Departments
                      join r in matchingIncidents.Select(m => m.deptNo)
                          on d.deptNo equals r
                      where r == deptNumber
                      select r;

int deptReportsCount = deptReports.Count();

matchingIncidents.Select(m => m.deptNo)现在是原始类型的本地集合,deptReportsint的序列(假设deptNo的类型为int)。但是为了计算得到的元素,它应该仍然没问题。

修改

您可能正在搜索静态EntityFunctions类:

http://msdn.microsoft.com/en-us/library/system.data.objects.entityfunctions.aspx

答案 1 :(得分:0)

问题可能是:

join r in matchingIncidents on d.deptNo == r.deptNo