1

私のDBには何人かの人がいます。それらの一部は「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),
    ...
    ...

人がテーブルにいない場合、これは真になりません: "where subsorting.UserRef == rp.UserRef". しかし、それらが表にあるかどうかにかかわらず、私はそれらを私のリストに集めたい. しかし、それらの hwo には sortOrder があり、その値を設定します。

問題は、linq でこれを解決し、値を持つ人々に値を与え、テーブルにない他の人々に maxValue を与えることは可能ですか? または、上に貼り付けたリンクからその部分を分割する必要がありますか。そして、すべての人を収集し (「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

必要なのは左外部結合だと思います。あなたはすでにそれを行っていますDefaultIfEmptyが、whereそれに続く条件はそれを元に戻します.

次のように変更してみてください。

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