2010-07-07 71 views
2

我有此代码,Group by不工作WCF数据服务

数据摘要是一个类,它不是一个实体。我用它的匿名类型“中选择新的”

public class DataSummary 
{ 
    public DataSummary() 
    { 
    } 

    public int AccountID 
    { 
     get; set; 
    } 

    public decimal Total 
    { 
     get; set; 
    } 
} 

然后我有这个疑问

 DateTime date1 = new DateTime(2003, 1, 1); 
     DateTime date2 = new DateTime(2011, 1, 1); 


     InitializeComponent(); 

     var query = (from d in svc.Data 
       where d.Date >= date1 && d.Date <= date2 
       group d by d.AccountID into g 
       orderby g.Key 
       select new DataSummary() 
       { 
        AccountID = g.Key.Value, 
        Total = g.Sum(d => (decimal) d.Value) 
       }) as DataServiceQuery<DataSummary>; 


     query.BeginExecute(new AsyncCallback(r => 
     { 
      try 
      { 
       this.grid.ItemsSource = query.EndExecute(r).ToList(); 
      } 
      catch (Exception ex) 
      { 
       string message = ex.Message; 
      } 
     }), null); 

当我运行查询时,它说,它由一群不被支持。 我看到很多关于使用group by的WCF数据服务的问题。任何人都知道发生了什么?

当我把代码放在服务器端时,它也给我一个错误。我曾尝试使用datasummary检索信息,但没有使用group,它起作用。所以我没办法了

在此先感谢

+0

为什么有人在回答? – user375863 2010-07-08 01:31:08

+0

我有同样的问题。但目前我正在做一些丑陋的代码。并仍在寻找最好的一个。我的解决方案是创建一个循环,所以我可以总结他们。 – 2011-09-08 01:58:22

+0

您可以试用我的产品[AdaptiveLINQ](http://www.adaptivelinq.com)来实施这种OData服务。 – nlips 2014-09-01 20:27:56

回答

4

组通过,因为有在URL查询语言,例如运营商不支持不通过WCF数据服务客户端库支持。我想知道你在哪里看到它提到它实际上有效。

您可以将所有有问题的实体下载到客户端,然后在内存中的客户端上执行分组,也可以在服务器上为此目的创建服务操作。如果您选择服务操作方法,按查询运行组的能力取决于您用于数据服务的提供者(例如EF应该能够处理该问题)。

+0

感谢Vitek,我确实在服务器端创建了一个服务运营商,它也没有工作。它也是这样说的。分组不受支持。现在我正在检查,它看起来像我没有在每个表中的主键,因为它是必需的。 – user375863 2010-07-09 13:03:13

+0

[WebGet] 公共的IQueryable GetTotals() { 回报(CurrentDataSource.Data.GroupBy(A => a.AccountID)。选择(G => 新DataSummary() { ACCOUNTTYPE = “”, 的AccountID = g.Key.Value, Value = g.Sum(p =>(decimal)p.Value) } ) ); } – user375863 2010-07-09 13:08:38

+0

服务操作中的支持受到您在WCF数据服务下使用的提供程序的限制。既然你没有提到它是哪一个,我不能评论它。 无论如何 - 即使它可以工作,创建任意新类型的事实也不会起作用,因为服务操作只能返回枚举已定义的实体或复杂类型。你将不得不返回一个原始值或已经定义的类型。 另请注意,目前客户端不支持从返回枚举复杂类型的服务操作解析响应。 – 2010-07-09 14:34:14