2011-08-04 16 views
3

私はサブソニック3上のActiveRecordを使用していると私は効果的にこれをしたい:私は、データをフェッチするストアドプロシージャを書いたが、サブソニックはfooとbarから列を保持するために、オブジェクトを作成しましたサブソニックのオブジェクトを介して結合テーブルからデータを返すにはどうすればよいですか?

select * from foo 
    left outer join bar on bar.Id = foo.barId 
where foo.someProperty = 2 

データを1つのオブジェクトに戻すための最良の方法は何ですか。ただバインドすることができます。理想的には私はそれをリスト<に入れたいですが、自分のクラスを書くことなく、亜音速で提供される方法はないようです。

+0

「共同」は私がよく作る間違いです;-) –

+1

ありがとう、ありがとう。手伝ってくれますか? – Gareth

+0

申し訳ありませんが、私はサブソニックが何であるか把握できません。私はちょうどあなたの見出しに惹かれました。 –

答えて

4

あなたは、あなたの選択だけで、他から選択するようになる、あなたの加入んデータベースビューを作成し、亜音速があなたのビューのデータ型を生成するかもしれない...ここ

をカップルのオプションがあります表。別の代替は、LINQのを行うことです。もちろん、

public List<dynamic> LoadData(int id) 
{ 
    var data = from f in db.Foo 
      from b in db.Bar.Where(x => x.Id == f.BarId).DefaultIfEmpty() 
      where f.SomeProperty == id 
      select new 
      { 
       SomeProperty = f.Something, 
       AnotherProperty = b.SomethingElse 
      }; 
    return data.Cast<dynamic>().ToList(); 
} 

代わりに、たとえば、(あなたは、.NET 4を使用している場合)、匿名または動的な型への参加を行うにLINQの式を使用することができます返されたデータを保持する独自のクラスを定義し、それを選択します。

public class MyData 
{ 
    public string SomeProperty { get; set; } 
    public string AnotherProperty { get; set; } 
} 

public List<MyData> LoadData(int id) 
{ 
    var data = from f in db.Foo 
      from b in db.Bar.Where(x => x.Id == f.BarId).DefaultIfEmpty() 
      where f.SomeProperty == id 
      select new MyData() 
      { 
       SomeProperty = f.Something, 
       AnotherProperty = b.SomethingElse 
      }; 
    return data.ToList(); 
} 
関連する問題