1

Linq to SQL に関する私の無知を許してください。

一度に複数のテーブルにクエリを実行するにはどうすればよいですか?

例:

次の単語「ペンギン」を含むタイトルの4つのテーブルをクエリしたいとします。おかしなことに、各テーブルには TITLE というフィールドもあります。

テーブルは次のようになります。

ここに画像の説明を入力

各テーブル (列: TITLE) に " penguin "という単語をクエリしたいと考えています。各テーブルは、単にReferenceと呼ばれる親テーブルに (外部キーを介して) 参照され、REF_ID と呼ばれる列にリンクされます。したがって、理想的には、クエリ条件が一致した REF_ID のリストが結果として返されるはずです。

あなたが助けることができれば、あなたは豊かに報われるでしょう....... (緑色のチェックマーク付き;)

私が持っているコードは、1 つのテーブルに対してのみ機能しますが、2 つのテーブルに対しては機能しません。

var refs = db.REFERENCEs
.Include(r => r.BOOK).Where(r => r.BOOK.TITLE.Contains(titleString)).Include(r => r.JOURNAL.AUTHORs)
.Include(r => r.JOURNAL).Where(r => r.JOURNAL.TITLE.Contains(titleString));
4

1 に答える 1

0

しばらく前に同様のシナリオがあり、最終的にテーブルを結合したビューを作成し、そのビューを LINQ-to-SQL エンティティにマップしました。

このようなもの:

create view dbo.References as

  select ref_id, title, 'Book' as source from dbo.Book
  union all
  select ref_id, title, 'Journal' from dbo.Journal
  union all
  select ref_id, title, 'Magazine' from dbo.Magazine
  union all
  select ref_id, title, 'Report' from dbo.Report

マッピングは次のようになります (属性を使用):

[Table(Name="References")]
public class Reference {

  [Column(Name="Ref_Id", IsPrimaryKey=true)]
  public int Id {get;set;}

  [Column]
  public string Title {get;set;}

  [Column]
  public string Source {get;set;}
}

次に、クエリは次のようになります。

var query = db.GetTable<Reference>().Where(r => r.Title.Contains(titleString));
于 2012-08-20T14:11:27.080 に答える