我有一个关于实体的简单问题。 我有一个简单的方法,它在db中的两个表之间进行简单的内连接, 现在返回的类型是匿名的,我认为, 如果我使用IEnumerable像下面它工作正常,当我填充datagridview它工作正常,但我如何在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 ???
}
答案 0 :(得分: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
}
}