2009-04-04 10 views
0

私は会社の登録者のデータベースを持っています(検索/ディレクトリ機能用)。この機能を利用する登録者(広告/追加画像/ロゴなど)に「強化された」情報を保持するための新しいテーブルを追加しました。現在、新しいテーブルには、登録者の一意の識別子と、いくつかの追加フィールド(画像へのパスなど)が格納されています。ユーザーは特定の条件でユーザーを検索することができ、拡張リストはリストの一番上に表示されます。検索結果に登録者が2回表示されないようにする必要があります(ユーザーが拡張されたリスティングを持っている場合は、上位の「拡張リスト」領域にのみ表示する必要があります)。どうすればこれを達成できますか?LINQを使用したSQL結果の結合

答えて

1

古いテーブルから新しいテーブルへの左外部結合。 「ケース「による順序」クエリのに

前に付加new_table.idは、その後、他の1 0終了nullである」

あなたはこの持っていたのであれば:

select foo, bar from old_table 
order by bar, foo; 

をあなたはこれを持っていると思います

select a.foo, a.bar from old_table a 
left join new table b on (a.customer_id = b.customer_id) 
order by 
case when new_table.customer_id is null then 1 else 0 end, 
bar, foo; 

編集:コードの外部結合から「左」を除外しました。

+0

私はちょうど左外部結合を使用しました(これを行うと言いましたが、小さなコードスニペットではありませんでした)。 –

1

LINQtoSQLとデザイナー生成エンティティを使用している場合は、適切な外部キーの関係を設定していると仮定して、登録者エンティティに関するエンティティの関連情報が必要です。後でこれを追加した場合は、これを手作業で追加するか(ここを参照)、デザイナーにエンティティを削除/再追加して新しい関係を拾う必要があります。次に、あなたのクエリのようなものになるだろう。おそらく数える

var registrants = db.Registrants.Where(... selection criteria here ...); 

registrants = registrants.OrderByDescending(r => r.EnhancedData.Count()) 
         .ThenBy(r => r.Name); // or normal sort order 

ので、これはあなたの結果の上部に強化されたデータを持つものを置く必要があります0または1のどちらかになります。

関連する問題