【问题标题】:How to send the Anonymous type object to a method如何将匿名类型对象发送到方法
【发布时间】:2011-05-29 21:48:43
【问题描述】:

我正在使用 Linq 使用 Entity Framework 来查询 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# linq frameworks entity


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你可能不应该那样做。如果没有类型信息,您的方法将无法(轻松)访问对象的属性。

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

      【讨论】:

      • 你能指导我在这种情况下如何编写元组吗?
      【解决方案3】:

      唯一的类型化方法是,如果另一个方法是泛型的,你让泛型类型推断来完成工作:

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

      当然,您也可以通过IListIEnumerableobjectdynamic 传递它没有任何类型信息

      【讨论】:

      • 当然,如果不使用反射,该方法将无法引用任何类型的属性。
      • @Amnon 非常正确——但这取决于这些方法想要做什么。一个常见的技巧是传入选择器来访问成员......
      • 你能指导我在这种情况下如何编写选择器吗?
      • @Harshal 例如通过将Func&lt;T,TValue&gt; 传递到方法中并在列表中的每个对象中调用它...
      猜你喜欢
      • 1970-01-01
      • 2015-10-19
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      • 2010-09-08
      相关资源
      最近更新 更多