Silverlight - LinqToEntities - 如何返回匿名类型

时间:2010-12-03 15:33:31

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

我不确定我是否正确地走这条路。我有一个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方法吗?如果是这样,我如何以及在何处定义我想要返回的类型?

是否有人可以指出我正确的方向,我会真正批评它。

谢谢... Scott

2 个答案:

答案 0 :(得分:5)

您无法返回匿名类型。它们必然是当前范围的本地。

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

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;
}

答案 1 :(得分:1)

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