1

我的数据库中有几个人。其中一些列在“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”。但即使它们在表中或不在表中,我也想将它们收集到我的列表中。但是在那些有 sortOrder 的情况下,我会设置它的值。

问题是:我是否可以在 linq 中解决这个问题,并给那些有价值的人一个价值,给那些不在桌子上的人一个 maxValue。或者我是否需要从我上面粘贴的 linq 中取出那部分。并收集我所有的人(即使他们是否在“OverviewSortOrders”表中)然后给他们价值?

4

2 回答 2

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()
于 2012-11-23T08:18:46.070 回答
1

我认为您需要的是左外连接。您已经这样做了,DefaultIfEmptywhere随后的条件将其恢复。

尝试像这样更改它:

where subsorting == null || subsorting.UserRef == rp.UserRef
于 2012-11-23T08:13:22.253 回答