foreach between Ienumerable

本文关键字:Ienumerable between foreach | 更新日期: 2023-09-27 18:28:05

我有一个关于实体的简单问题。我有一个简单的方法,它在数据库中的两个表之间进行简单的内部连接,现在返回的类型是匿名的,我想,如果我像下面这样使用IEnumerable,它可以很好地工作,当我填充datagridview时,它可以工作,但我如何在IEnumeraable和检索我的对象之间移动,因为它们是匿名类型,我们不能使用这个:

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 ???
 } 

foreach between Ienumerable

您不能在方法之间传递匿名类型(当然可以,但不是强类型的,这充其量是一个糟糕的解决方法)。最好的方法是为此定义一个简单的类,您可以在投影中使用:

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
    }
 }