c# - 可空对象在连接表查询中必须有值
问题描述
我有三张桌子TableTeam
,TableUser
和TableLink
。我想加入他们以获取列表。
var teams = _db.TableTeam;
var users = _db.TableUser;
var managerIds = teams.Select(x=>x.ManagerId).ToList();
var list = (from user in _db.TableUser
where user.EndDate == null && user.ManagerId != null && managerIds.Contains(user.ManagerId.Value)
let r = _db.TableLink.FirstOrDefault(l => l.ProjectId == projectId && l.UserId == user.UserId)
let t = _db.TableTeam.FirstOrDefault(m => m.ManagerId == user.ManagerId)
select new MyDto
{
ProjectId = projectId,
UserId = user.UserId,
IsAssigned = r.AssignedId > 0 ?true : false,
AssignedId = r.AssignedId,
Percent = r.Percent.HasValue ? (r.Percent.Value).ToString() + "%": ""
}).GroupBy(d => d.UserId).ToList();
对于表TableLink
,实体框架中对应的dataSet类为:
public LinkDto
{
public int AssignedId {get;set;}
public short ProjectId {get;set;}
public short UserId {get;set;}
public decimal? Percent {get;set;}
// ...
}
但是我得到了错误:
可空对象必须有一个值
我认为这可能是由decimal? Percent
. 但不确定如何解决。我也可以使用 store d 过程,这意味着如果你可以通过 SQL 查询来解决它,那也很好。
解决方案
事实证明,我必须在子句let
之前移动代码,where
然后将条件添加到where
.
如
var list = (from user in _db.TableUser
let r = _db.TableLink.FirstOrDefault(l => l.ProjectId == projectId && l.UserId == user.UserId)
let t = _db.TableTeam.FirstOrDefault(m => m.ManagerId == user.ManagerId)
where user.EndDate == null && user.ManagerId != null && managerIds.Contains(user.ManagerId.Value)
&& r != null && t != null
select new MyDto
{
ProjectId = projectId,
UserId = user.UserId,
IsAssigned = r.AssignedId > 0 ?true : false,
AssignedId = r.AssignedId,
Percent = r.Percent.HasValue ? (r.Percent.Value).ToString() + "%": ""
}).GroupBy(d => d.UserId).ToList();
推荐阅读
- shell - zsh 颜色仅在终端中直接使用命令时才有效
- javascript - 使用继承的未知属性
- python - 使用 Selenium 刮取无限滚动问题
- php - 使用 updateOrInsert() 方法批量插入/更新并将数组转换为字符串
- python - 如何使用 QPropertyAnimation 和 QPainter 绘制弧线
- powershell - 使用 StreamReader 在每行的多个列上复制 Vlookup 的问题
- bash - 尝试使用 awk 解析 DNS 区域文件,但在将前导字符与 awk 匹配时遇到问题
- javascript - 如何创建 JavaScript 对象并动态填充数据?
- django - 无法使用 django 限制对帖子编辑屏幕的访问
- python - 单击已打开网页上的按钮