我的数据库中有几个人。其中一些列在“OverviewSortOrders”表中,但不是全部列出。 当我在我的linq中收集我的所有人时,我加入了OverviewSortOrders,但当时表中没有列出那些表中没有的人。 但即使他们在那张桌子上,我也想要那些人。
from...
join...
join..
join sorting in db.OverviewSortOrders on person.PersonRef equals sorting.PersonRef into moso
from subsorting in moso.DefaultIfEmpty()
where subsorting.UserRef == rp.UserRef
select new
{
SortOrder = (subsorting == null ? int.MaxValue : subsorting.SortOrder),
...
...
如果表中的人员不会这样:“subsorting.UserRef == rp.UserRef”。 但是,即使他们在桌子上,我也想把它们收集到我的名单中。但是那些hwo有一个sortOrder我会设置它的值。
问题是: 我是否有可能在linq中解决这个问题,并为具有值的人和给表中其他人的maxValue赋值。或者我是否需要从上面粘贴的linq中删除该部分。收集我的所有人(即使他们是否在“OverviewSortOrders”表中),然后给他们提供价值?
答案 0 :(得分:2)
变化:
from subsorting in moso.DefaultIfEmpty()
where subsorting.UserRef == rp.UserRef
...为:
from subsorting in (
from ss in moso
where ss.UserRef == rp.UserRef
select ss
).DefaultIfEmpty()
答案 1 :(得分:1)
我认为你需要的是一个左外连接。您已使用DefaultIfEmpty
执行此操作,但后面的where
条件会恢复该值。
尝试改变它:
where subsorting == null || subsorting.UserRef == rp.UserRef