我有一个关于实体的简单问题.我有一个简单的方法,它在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 ???
}
Run Code Online (Sandbox Code Playgroud)
你不能在方法之间传递匿名类型(你可以,但不是强类型,它最好是一个糟糕的解决方法).最好的方法是为您定义一个可以在投影中使用的简单类:
public class Foo
{
public int Id {get;set;}
public string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以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
}
}
Run Code Online (Sandbox Code Playgroud)