2012-03-18 9 views
-1

エンティティに関する簡単な質問があります。 私はシンプルなメソッドを持っているので、db内の2つのテーブルの間で簡単に内部結合を行います。 今返される型は匿名です IEnumerableを以下のように使用すると、うまく動作し、データグリッドビューを満たしてもうまく動作しますIEnumerableを、その匿名のタイプがあり、私たちはこれを使用することはできませんので、私のオブジェクトを取得:foreach between Ienumerable

foreach(var o in result) 
o.Id //did not have a type and is not accessible 

????? Testmethod() 
{ 
    IEnumerable<object> result; 

    using (var context = new TestDBEntities()) 
    { 


     result = (from a in context.Table1 
       join b in context.Table2 
        on a.ID equals b.Id 
       select new { b.Id ,b.name }); 
      } 

return ??? 
} 

答えて

5

あなたは(うまくすることができますが、強く型付けされた、それはせいぜい悪いの回避策になりません)メソッドの間で匿名型を渡すことはできません。

public class Foo 
{ 
    public int Id {get;set;} 
    public string Name {get;set;} 
} 

今、あなたは結果として、クエリでFooを使用してIEnumerable<Foo>を返すことができます:

IEnumerable<Foo> Testmethod() 
{ 
    using(var context = new TestDBEntities()) 
    { 
     var result = (from a in context.Table1 
         join b in context.Table2 
         on a.ID equals b.Id 
         select new Foo() { Id = b.Id , Name = b.name }); 
     return result.ToList();//force materializing results 
    } 
} 
最善のアプローチは、あなたの投影で使用することができ、このための単純なクラスを定義することです