C# 多个,其中';在同一个linq2sql方法中
我有下面的LINQ方法,我正在尝试创建。问题似乎是第二个WHERE条款。我得到这个错误-->C# 多个,其中';在同一个linq2sql方法中,c#,.net,linq,linq-to-sql,C#,.net,Linq,Linq To Sql,我有下面的LINQ方法,我正在尝试创建。问题似乎是第二个WHERE条款。我得到这个错误--> 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“bool” 我也有&&那里vs那里但是我得到了一个类似的错误。除了EndDate之类的东西之外,我不需要任何tblWorkeryStories中的东西 这两个表之间存在多对多关系,EnrollmentID在这两个表上都是FK public static DataTable GetCurrentWorke
无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“bool”
我也有&&
那里vs那里
但是我得到了一个类似的错误。除了EndDate
之类的东西之外,我不需要任何tblWorkeryStories
中的东西
这两个表之间存在多对多关系,EnrollmentID
在这两个表上都是FK
public static DataTable GetCurrentWorkersByEnrollmentID(int enrollmentID)
{
using (var context = CmoDataContext.Create())
{
context.Log = Console.Out;
var currentWorkers = from enrollment in context.tblCMOEnrollments
where enrollment.EnrollmentID == enrollmentID
where enrollment.tblWorkerHistories.Where(a => a.EndDate == null || a.EndDate > DateTime.Now)
select
new
{
enrollment.CMONurseID,
enrollment.CMOSocialWorkerID,
SupportWorkerName = enrollment.tblSupportWorker.FirstName + " " + enrollment.tblSupportWorker.LastName,
SupportWorkerPhone = enrollment.tblSupportWorker.Phone
};
return currentWorkers.CopyLinqToDataTable();
}
}
我猜您的意思是
.Any
,而不是子查询中的。Where
;最外面的.Where
(即第二个Where
)需要谓词表达式,但您的当前是选择器-请尝试:
这就是问题所在:
where enrollment.tblWorkerHistories.Where(/* stuff */)
其中
返回一个序列。。。而您需要返回布尔值的东西。你想用嵌入的Where
子句做什么
正如马克所说,你可能只需要一个Any
调用,而不是Where
。。。但是如果你能解释你想做什么,那会让你更容易得到帮助。请注意,Any
确实返回布尔值,而不是序列
编辑:好的,在SQL中,您可以使用联接,但这里不需要显式联接,因为LINQ隐式地为您这样做,对吗?如果您试图查找任何历史记录与日期匹配的注册,而您并不关心历史记录本身,那么any
确实是您想要的:
var currentWorkers = from enrollment in context.tblCMOEnrollments
where enrollment.EnrollmentID == enrollmentID
where enrollment.tblWorkerHistories.Any
(a => a.EndDate == null || a.EndDate > DateTime.Now)
select ...
在SQL术语中,我正在尝试从tblWorkerHistory h内部连接tblCMOEnrollment e在h.EnrollmentID=e.EnrollmentID上执行此操作-->
,其中h.EnrollmentID=AnInhere和(h.EndDate为NULL)或(h.EndDate>GetDate())
我正试图根据tblWorkerHistories
中的EndDate字段限制tblCMOEnrollments
中的结果集,谢谢,这就成功了。旁注,使用第二个WHERE和&&有区别吗?它们似乎都能起作用……@折射圣骑士:不,它们基本上应该做相同的事情。我倾向于对逻辑上独立的条件使用多个where子句,对同一逻辑条件的多个位使用&。
var currentWorkers = from enrollment in context.tblCMOEnrollments
where enrollment.EnrollmentID == enrollmentID
where enrollment.tblWorkerHistories.Any
(a => a.EndDate == null || a.EndDate > DateTime.Now)
select ...