【发布时间】:2015-05-10 06:43:41
【问题描述】:
我在下面有两张表:
Project(
ProjectID INT,
Name VARCHAR(200),
AssignedUserID INT NULL
)
User(
UserID INT,
LastName VARCHAR(50),
FirstName VARCHAR(50)
)
我正在使用实体框架数据库优先方法。所以在我的模型中:
Class Project{
public int ProjectID;
public string Name;
public Nullable<int> AssignedUserID;
}
Class User{
public int UserID;
public string LastName;
public string FirstName;
}
我要查询所有PROJECT及其分配的用户:
SELECT
p.ProjectID,
p.Name,
u.LastName,
u.FirstName
FROM Project p
LEFT JOIN Users u ON u.UserID = p.AssignedUserID
翻译成 Linq:
var projectDetails =
from p in context.Project
join u in context.User
on p.AssignedUserID equals u.UserID into lj
from x in lj.DefaultIfEmpty()
select new {
ProjectID = p.ProjectID,
ProjectName = p.Name,
UserLastName = u.LastName,
UserFirstName = u.FirstName
}
但是,我收到一个错误:
连接子句中的一个表达式的类型不正确。 调用“加入”时类型推断失败。
我在 int? and int comparison when LEFT OUTER JOIN in Linq issue 上尝试了这两种解决方案,但仍然出现以下错误:
使用解决方案:(int)(p.AssignedUserID ?? default(int))
LINQ to Entities 无法识别方法“Int32 ToInt32(Int32)” 方法,并且该方法不能翻译成商店表达式。
使用解决方案GetValueOrDefault():
LINQ to Entities 无法识别方法 'Int32 GetValueOrDefault(Int32)' 方法,该方法不能翻译 到商店表达式中。
LEFT JOIN 在Nullable<int> 和int 上的表现如何?
【问题讨论】:
标签: c# linq entity-framework join