C# 多个,其中';在同一个linq2sql方法中

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

我有下面的LINQ方法,我正在尝试创建。问题似乎是第二个WHERE条款。我得到这个错误-->

无法将类型“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 ...