1
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;
4

2 回答 2

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是 type int)的序列。但是对于计算结果元素,它应该仍然没问题。

编辑

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

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

于 2011-06-01T16:40:08.163 回答
0

问题可能是:

join r in matchingIncidents on d.deptNo == r.deptNo
于 2011-06-01T16:23:09.940 回答