如何匿名类型对象发送到一个方法
问题描述:
我使用LINQ使用实体框架如下查询MySQL数据库 -如何匿名类型对象发送到一个方法
var query = from c in subQuery
select new
{
Client = c.Client,
GlobalList = c.GlobalList,
Book = (from book in context.Books
where book.c_clt_id == c.Client.c_clt_id
select book)
};
var totalSearch = query.ToList();
现在我想通过totalSearch作为参数传递给另一个方法。请帮助我如何做到这一点?
答
您也可以使用C#动态关键字。当然,这是一个缓慢的反思和类型不安全。例如:
void SomeMethod(dynamic d)
{
Console.WriteLine(d.Client);
Console.WriteLine(d.GlobalList.Count);
}
答
唯一类型,你可以做到这一点方式是,如果其他方法是通用的,你让泛型类型推断做的工作:
void SomeOtherMethod<T>(List<T> list) {...}
...
SomeOtherMethod(totalSearch);
你也可以通过它没有任何类型的信息通过IList
,IEnumerable
,object
或dynamic
,当然。
答
你可能不应该那样做。没有类型信息,你的方法不会(很容易)能够访问对象的属性。
改为使用具体的用户定义类型。如果您的对象非常短暂,并且您不想创建新类型,则可以使用Tuple(需要.NET 4或更高版本)。
当然,如果不使用反射,该方法将无法引用任何类型的属性。 – Amnon 2010-12-23 10:41:34
@Amnon非常真实 - 但这取决于这些方法想要做什么。而一个常见的技巧是通过选择器访问成员... – 2010-12-23 10:44:00