C# 如何将匿名类型对象发送到方法
我正在使用Linq使用实体框架查询MySQL数据库,如下所示-C# 如何将匿名类型对象发送到方法,c#,linq,frameworks,entity,C#,Linq,Frameworks,Entity,我正在使用Linq使用实体框架查询MySQL数据库,如下所示- var query = from c in subQuery select new { Client = c.Client, GlobalList = c.GlobalList, Book = (from book in context.Books
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作为一个参数传递给另一个方法。请帮助我如何做到这一点?唯一可以做到这一点的类型化方法是,如果另一个方法是泛型的,您可以让泛型类型推断完成这项工作:
void SomeOtherMethod<T>(List<T> list) {...}
...
SomeOtherMethod(totalSearch);
void SomeOtherMethod(列表){…}
...
其他方法(totalSearch);
当然,您也可以通过
IList
、IEnumerable
、object
或dynamic
传递它,而不需要任何类型信息。您可能不应该这样做。如果没有类型信息,您的方法将无法(轻松)访问对象的属性
改为使用具体的用户定义类型。如果对象寿命很短,并且不想创建新类型,则可以使用(需要.NET 4或更高版本)。也可以使用C#dynamic关键字。当然,这是一个缓慢的反射和类型不安全。例如:
void SomeMethod(dynamic d)
{
Console.WriteLine(d.Client);
Console.WriteLine(d.GlobalList.Count);
}
当然,如果不使用反射,该方法将无法引用任何类型的属性。@Amnon非常正确-但这取决于该方法想要做什么。一个常见的技巧是传入选择器来访问成员…你能指导我在这种情况下如何编写选择器吗?@Harshal例如,将
Func
传递到方法中,并在列表中为每个对象调用它…你能指导我在这种情况下如何编写元组吗?