2010-12-23 77 views
4

我使用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作为参数传递给另一个方法。请帮助我如何做到这一点?

回答

1

您也可以使用C#动态关键字。当然,这是一个缓慢的反思和类型不安全。例如:

void SomeMethod(dynamic d) 
{ 
    Console.WriteLine(d.Client); 
    Console.WriteLine(d.GlobalList.Count); 
} 
3

唯一类型,你可以做到这一点方式是,如果其他方法是通用的,你让泛型类型推断做的工作:

void SomeOtherMethod<T>(List<T> list) {...} 
... 
SomeOtherMethod(totalSearch); 

你也可以通过它没有任何类型的信息通过IListIEnumerable,objectdynamic,当然。

+0

当然,如果不使用反射,该方法将无法引用任何类型的属性。 – Amnon 2010-12-23 10:41:34

+0

@Amnon非常真实 - 但这取决于这些方法想要做什么。而一个常见的技巧是通过选择器访问成员... – 2010-12-23 10:44:00

2

你可能不应该那样做。没有类型信息,你的方法不会(很容易)能够访问对象的属性。

改为使用具体的用户定义类型。如果您的对象非常短暂,并且您不想创建新类型,则可以使用Tuple(需要.NET 4或更高版本)。