【问题标题】:Silverlight - LinqToEntities - How Do I Return Anonymous TypesSilverlight - LinqToEntities - 我如何返回匿名类型
【发布时间】:2010-12-03 15:33:31
【问题描述】:

我不确定我的做法是否正确。我有一个 Silverlight 应用程序,其中很多都使用实体框架。我有两个实体映射到我的数据库:标题和详细信息。我想提交一个左外部连接以获取所有标题和详细信息计数 - 即使标题记录没有详细记录。这是我想从客户端运行的 Linq 查询:

var query =
      from head in storeContext.Headers
      join detail in storeContext.Details
      on head.HeadId equals details.HeadId
      into group
      select new 
      {
        Desc = head.Description,
        MyCount = group.Count()
      };

由于这是 Silverlight,我需要构建我的查询,然后使用我的域服务(客户端上的上下文)中的 storeContext.Load<T>() 方法将其提交到服务器。因为这个方法需要一个类型,所以我不知道如何构造调用以返回匿名类型,因为我是上面的东东?

我做错了吗?我应该对这样的事情使用 Invoke 方法吗?如果是这样,我如何以及在哪里定义我想要返回的类型?

有人能指出我正确的方向吗?我真的很感激。

谢谢...斯科特

【问题讨论】:

  • 你不能返回匿名类型,不管你是在 WCF RIA 还是其他什么
  • Return anonymous type? 的可能重复项

标签: c# silverlight entity-framework linq-to-entities anonymous-types


【解决方案1】:

您不能返回匿名类型。它们必然是当前作用域的局部变量。

您的查询看起来正确,但您需要返回一个命名类型:

var query =
      from head in storeContext.Headers
      join detail in storeContext.Details
      on head.HeadId equals details.HeadId
      into group
      select new MyHelper // SPECIFY A CLASS HERE
      {
        Desc = head.Description,
        MyCount = group.Count()
      };

您的查询方法需要返回一个IEnumerable<MyHelper>

public IEnumerable<MyHelper> GetInfo()
{
    var query ...

    return query;
}

【讨论】:

  • 你不能用dynamic包装一个匿名类型吗?
  • @Jeff - 我还没玩过dynamic 所以我不知道。
  • 我也不是,但我现在很好奇。并不是说我认为这一定是个好主意,但仍然很有趣。
  • 感谢您的帮助。这解决了我的问题。问题:在客户端和服务器上都创建助手类更好,还是只在客户端添加Using?
  • @Scott,您应该能够在服务器上创建类,如果您创建元数据类,它将自动在客户端创建。
【解决方案2】:

你永远不能从一个方法返回一个匿名类型的实例。匿名类型总是是方法本地的。如果你想通过 WCF 返回一个类型,你将不得不自己编写类,而不是依赖匿名类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    相关资源
    最近更新 更多