C# 实体框架/linq查询问题

C# 实体框架/linq查询问题,c#,entity-framework,silverlight-4.0,wcf-ria-services,C#,Entity Framework,Silverlight 4.0,Wcf Ria Services,因此,我试图解决silverlight报告应用程序中缺少存储过程支持的问题,我的linq有点问题 我有一个如下所示的存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: Some Dev Guy -- Create date: 11/02/10 -- ===================================

因此,我试图解决silverlight报告应用程序中缺少存储过程支持的问题,我的linq有点问题

我有一个如下所示的存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  Some Dev Guy
-- Create date: 11/02/10
-- =============================================
Alter PROCEDURE spGetTopReferers
 @p_sitekey SmallInt, 
 @p_startDate SmallDateTime, 
 @p_endDate SmallDateTime
AS
BEGIN

 SET NOCOUNT ON;  

 SELECT 
  TOP 10 
   SUM(DaySummaryReferrers.Visits) AS Visits, 
   SUM(DaySummaryReferrers.NewVisitors) AS 'New Visitors', 
   SUM(DaySummaryReferrers.Prospects) AS Prospects, 
   SUM(DaySummaryReferrers.Customers) AS Customers, 
   Referrers.Referrer
  FROM 
   DaySummaryReferrers 
   LEFT OUTER JOIN 
   Referrers 
   ON 
   DaySummaryReferrers.ReferrerID = Referrers.ReferrerID
  Where 
   DaySummaryReferrers.SiteKey = @p_sitekey 
   AND
   DaySummaryReferrers.Dated 
    Between 
     @p_startDate
     AND
     @p_endDate
  GROUP BY 
   Referrers.Referrer
  ORDER BY 
   Visits DESC; 
END
GO
我已经创建了以下DomainService类,以便今天可以使用实体框架进行查询。我想将查询结果推送到我的自定义数据结构中,因为我没有一个实体包含我的报告所需的所有信息(特别是访问和参考)

错误:

Error   2   'string' does not contain a definition for 'Customers' and no extension method 'Customers' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?) C:\Users\User\documents\visual studio 2010\Projects\Reports\Reports.Web\Services\WebReportAggregateService.cs   53  108 Reports.Web
对于访问、自定义、潜在客户、访客、推荐人和推荐人ID,我会收到此错误


如果您在类属性中有
Customer
单数形式,在LINQ中有
Customers
复数形式,我们将不胜感激

public class TopReferers
{
    [Key]
    [Editable(false)]
    public int reffererID { get; set; }
    public int? Visits { get; set; }
    public int? Visitors { get; set; }
    public int? Prospects { get; set; }
    public int? **Customer** { get; set; }
    public String Referrer { get; set; }

}

什么类型的
推荐人。推荐人1
?从错误中,听起来您的组键是一个
字符串

我认为您要做的是通过复合键进行分组:

group referrer by new { ID = referrerName.ReferrerID, Name = referrerName.Referrer1 }
然后选择以下选项:

select new TopReferers { referrerID = g.Key.ID,
                         Visits = g.Sum(x => x.Visits),
                         Visitors = g.Sum(x => x.NewVisitors),
                         Prospects = g.Sum(x => x.Prospects),
                         Customer = g.Sum(x => x.Customers),
                         Referrer = g.Key.Name }

你可以从在你的问题中包含一个错误开始…这个错误是为所有g.Key属性生成的。错误2“字符串”不包含“客户”的定义,并且找不到接受“字符串”类型的第一个参数的扩展方法“客户”(是否缺少using指令或程序集引用?)C:\Users\User\documents\visualstudio 2010\Projects\Reports\Reports.Web\Services\webreportaggregateseservice.cs 53 108 Reports.Web结果表明,我在myreferersvariable上使用Take(10)方法导致了一些错误。我的组键是字符串,根据您的句子上下文,我假设组密钥需要是int?@Robotsushi,否-如果尝试调用
int
上的
Customers
方法,会产生类似的错误。请看我编辑的答案-我不完全确定ID和名称的来源,但我认为这很接近。
group referrer by new { ID = referrerName.ReferrerID, Name = referrerName.Referrer1 }
select new TopReferers { referrerID = g.Key.ID,
                         Visits = g.Sum(x => x.Visits),
                         Visitors = g.Sum(x => x.NewVisitors),
                         Prospects = g.Sum(x => x.Prospects),
                         Customer = g.Sum(x => x.Customers),
                         Referrer = g.Key.Name }