0

不知何故,我无法弄清楚如何在语句的 ON 部分中转换 linq 参数的类型。该语句将导致以下错误:

错误 1 ​​连接子句中的表达式之一的类型不正确。调用“GroupJoin”时类型推断失败。

ProjectID = pID 的类型是 int,还有 r.ProjectID。那么有没有人知道是什么导致了这个错误?

ViewData.Model = (from c in _db.Category
    join r in _db.CategoryAndProject2
    on new { c.CategoryID, ProjectID = pID } equals new { r.CategoryID,  r.ProjectID }
    into join1
    from j in join1.DefaultIfEmpty()
    select new CategoryDTO
    {
    CatID = (int) j.CategoryID    
    }).Distinct().ToList(); 

在线编辑,因为缺少代码

4

2 回答 2

0

尝试这个:

on (int?)c.CategoryID equals r.CategoryID

连接中不需要匿名类型。

于 2013-03-22T12:58:53.093 回答
0

你可以这样做:

from c in _db.Category
join r in _db.CategoryAndProject2
on new { c.CategoryID, ProjectID = pID } equals
   new { CategoryID = r.CategoryID ?? 0,  r.ProjectID }
...

虽然这样做可能更有效

from c in _db.Category
join r in _db.CategoryAndProject2
on new { CategoryID = (int?)c.CategoryID, ProjectID = pID } equals
   new { r.CategoryID, r.ProjectID }
...

因为这会转化为字段上的直接连接,无需转换。第一个查询包含 a COALESCE,它排除了索引的使用。

于 2013-03-22T18:05:00.950 回答