C LInq子查询问题
我正在尝试创建一个包含几个子查询的linq查询。我创建的查询似乎至少在语法上是正确的,但我没有收到返回的数据,Fiddler显示此查询有错误:C LInq子查询问题,linq,linq-to-sql,subquery,Linq,Linq To Sql,Subquery,我正在尝试创建一个包含几个子查询的linq查询。我创建的查询似乎至少在语法上是正确的,但我没有收到返回的数据,Fiddler显示此查询有错误: public IQueryable<vGatekeeperApproval> GetGatekeeperApprovals(string UserName) { SystemsFormsDataContext db = new SystemsFormsDataContext(); IQu
public IQueryable<vGatekeeperApproval> GetGatekeeperApprovals(string UserName)
{
SystemsFormsDataContext db = new SystemsFormsDataContext();
IQueryable<vGatekeeperApproval> query;
Int32 UserId = GetCurrentUserId(UserName);
bool IsGatekeeperApprover = IsCurrentUserGKApprover(UserName);
string strSysApproverEmail = GetSystemsApproverEmail(UserName);
try
{
query = (from s in db.vGatekeeperApprovals
join r in db.Requests on s.RequestId equals r.Id
where (IsGatekeeperApprover == true || s.OverrideApproverId == UserId)
&& (
(
from u in db.Staffs
where u.GateKeeperArea ==
(from c in db.vGK_DIV_USING_CCs
where c.SEGMENT_CODE ==
(from a in db.Attributes
where a.AttributeItemId== global_COSTCENTRE && a.FormId==s.Id
select a.AttributeValue).FirstOrDefault()
select c.PARENT_CODE_L3
).FirstOrDefault()
select u.Id
).ToList().Contains(UserId)
)
select s
);
}
catch (Exception ex)
{
query = (from s in db.vGatekeeperApprovals
where s.UserId == 0
select s);
//LogEvent("ERROR!" + ex.Message, ex.Source);
}
return query;
}
你知道是什么导致了这个问题吗?有没有更好的方法在linq中创建子查询
任何帮助都将不胜感激
Shuja
不能使用.FrestRealStudio和.TLIST在LIQ-SQL查询的中间,在DB服务器上执行。这些操作将强制对象在内存中存储
尝试将.FirstOrDefault和.ToList的用法改为使用外部联接,如:join a in db.Attributes on
new {AID=global_COSTCENTRE,s.Id} equals
new {AID=a.AttributeItemId,a.FormId} into aouter
from x in aouter.DefaultIfEmpty().Take(1)
然后,您可以测试x==null或否
遵循此模式,您甚至可以重构为不使用子查询,只使用外部连接到第一行
如果您的所有对象都在内存中,这将是有效的Linq,而不是有效的Linq sql。您会遇到什么错误?