我在linq中走到了尽头吗?

时间:2012-11-23 08:06:11

标签: c# linq

我的数据库中有几个人。其中一些列在“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”表中),然后给他们提供价值?

2 个答案:

答案 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