3

我正在尝试使用 LINQ to EF 复制以下 SQL,但没有运气。

select * from Role
left join QueueAccess on Role.RoleId = QueueAccess.RoleId and queueId = 361

这是我尝试过的。

var myAccess = (from role in entity.Role.Include(p => p.QueueAccess)
join qa in entity.QueueAccess
on new { rID = role.RoleId, qID = queueId } equals new { rID = qa.RoleId, qID = qa.QueueId }
select role).ToList();

这个也试过了。

var myAccess = entity.Role.Include(p => p.QueueAccess)
         .Where(x => x.QueueAccess.Any(a => a.QueueId == queueId)).ToList();

我继续只获取具有指定 queueId 的记录,但没有获取 queueId 为空的其他记录。

谢谢你的帮助。

4

3 回答 3

4

join在 LINQ to Entities中使用几乎总是一个错误。相反,请执行以下操作:

var myAccess = (((ObjectQuery)from role in entity.Role
                              where role.QueueAccess.Any(a => a.QueueId == queueId)
                              select role).Include("QueueAccess")).ToList();
于 2010-01-29T14:06:06.457 回答
2

尝试这样的事情:

var access = from role in Role
             join oq in (from q in QueueAccess
                         where q.queueId = 361
                         select q) on role.RoleId equals queue.RoleId into oqs
             from queue in oqs.DefaultIfEmpty()
             select new { role.RoleId, queue.Property };
于 2010-01-28T23:44:24.983 回答
0

像这样的东西也可以,将条件放在与 WHERE 子句相反的 ON 中。

join tbl3 in model.phone.Where(p => p.queue == 0  && p.phnkey == key) on x.key equals tbl3.y into a3
                            from phn in a3.DefaultIfEmpty()
                            where (phn.abc == 0 )
于 2011-11-11T21:31:41.663 回答