我对此查询有疑问:
var res = from c in db.Client
where db.TimesheetLine.Select(o => o.ClientId &&
o.TimesheetId == timesheetId)
.Contains(c.Id)
select c;
我收到错误消息:
运营商'&&'不能应用于'int?'类型的操作数和'布尔'。
我想做的就是选择时间表X中的所有客户
我有客户端类和时间表行
public class CLient
{
public int Id { get; set; }
public string ClientName { get; set; }
}
public class TimesheetLine
{
public int TimesheetLineId { get; set; }
public int TimesheetId { get; set; }
public System.DateTime Date { get; set; }
public double Duration { get; set; }
public Nullable<int> ClientId { get; set; }
public Nullable<int> ClientAddressId { get; set; }
public int ActivityTypeId { get; set; }
public string Overtime { get; set; }
public string Description { get; set; }
public virtual Activity Activity { get; set; }
public virtual Client Client { get; set; }
public virtual ClientAddress ClientAddress { get; set; }
public virtual Timesheet Timesheet { get; set; }
}
答案 0 :(得分:3)
尝试使用其他查询:
var res = (from ts in db.TimesheetLine
where ts.TimesheetId == timesheetId)
select ts.Client).ToList();
遍历TimsheetLine数据,挑选与特定时间表相关联的客户。
您可以进行空检查以防万一:
var res = (from ts in db.TimesheetLine
where ts.TimesheetId == timesheetId && ts.Client != null)
select ts.Client).ToList();
答案 1 :(得分:3)
您可以制作join
var res = from client in db.Client
join timesheetLine in db.TimesheetLine
on client.Id equals timesheetLine.ClientId.GetValueOrDefault()
where timesheetLine.timesheetId == timesheetId
select client;
这里有趣的部分是我们希望将连接基于可空int,timesheetLine.ClientId
和int client.Id
的值。为了实现它,我们使用GetValueOrDefault
方法返回默认值nullable,当nullable没有值时。在这种情况下,将返回的值为0. 假设没有任何客户端Id
以上工作。不同的是,我们必须改变它。
答案 2 :(得分:1)
您无法在Select
内编写条件语句。您可以改为使用Any
:
var res = from c in db.Client
where db.TimesheetLine.Any(o => o.ClientId == c.Id)
select c;