匿名linq查询select的返回类型是什么?返回此数据的最佳方式是什么?

匿名linq查询select的返回类型是什么?返回此数据的最佳方式是什么?,linq,silverlight,linq-to-entities,silverlight-4.0,Linq,Silverlight,Linq To Entities,Silverlight 4.0,这是一个基本问题。我已经建立了基本的SL4/RIA项目,我想在域服务中创建一个新方法,并从中返回一些数据。我不确定做这件事最简单的方法。。我应该用收费表把它包起来吗?我不清楚如何处理创建的此匿名类型。。返回此数据的最简单方法是什么 public IQueryable<ApplicationLog> GetApplicationLogsGrouped() { var x = from c in ObjectContext.ApplicationLogs

这是一个基本问题。我已经建立了基本的SL4/RIA项目,我想在域服务中创建一个新方法,并从中返回一些数据。我不确定做这件事最简单的方法。。我应该用收费表把它包起来吗?我不清楚如何处理创建的此匿名类型。。返回此数据的最简单方法是什么

 public IQueryable<ApplicationLog> GetApplicationLogsGrouped()
    {
        var x = from c in ObjectContext.ApplicationLogs
                let dt = c.LogDate
                group c by new { y = dt.Value.Year, m = dt.Value.Month, d = dt.Value.Day } into mygroup
                select new { aaa = mygroup.Key, ProductCount = mygroup.Count() };

        return x;


        // return this.ObjectContext.ApplicationLogs.Where(r => r.ApplicationID < 50);
    }

无法将类型“System.Linq.IQueryable”隐式转换为“System.Linq.IQueryable”。存在显式转换。是否缺少强制转换?58 20 CapRep4.Web

尝试使用KeyValuePair

public IQueryable<KeyValuePair<ApplicationLog,int>> GetApplicationLogsGrouped()
{
  var x = from c in ObjectContext.ApplicationLogs
          let dt = c.LogDate
          group by c  into mygroup
          select new KeyValuePair<ApplicationLog,int>( mygroup.Key,mygroup.Count()) ;

  return x;

  // return this.ObjectContext.ApplicationLogs.Where(r => r.ApplicationID < 50);
}

匿名类型与任何其他类类似,但它是由编译器创建的。编译器生成的内容类似于:

class AnonymousType1 {
  public AnonymousType2 Key { get; set; }
  public int ProductCount { get; set; }
}

class AnonymousType2 {
  public int y { get; set; }
  public int m { get; set; }
  public int d { get; set; }
}

这些类对您来说是不可访问的,因此如果您想保持强类型,您别无选择,只能使用与Anonymous1定义匹配的自定义类。然后您将像这样使用它:newmyclass{Key=myGroup.Key,ProductCount=myGroup.Count}。

您需要为投影创建自己的类

public class ApplicationLogStatistic
{
    public ApplicationLog ApplicationLog { get; internal set; }
    public int ProductCount { get; internal set; }
}


好啊因此,我要么自己制作类,要么自己制作键/值。。如果我返回的值超过2个怎么办??这就是使用元组的情况吗?我一直想找到一个理由来使用元组,可能是我理解的元组的重复。但是这个方法的签名是什么呢?public IQueryable getapplicationlogsgroupped{var x=from c in ObjectContext.ApplicationLogs让dt=c.LogDate组c通过新的{y=dt.Value.Year,m=dt.Value.Month,d=dt.Value.Day}在mygroup中选择新的KeyValuePair mygroup.Key,mygroup.Count;返回x;参数1:无法从“AnonymousType1”转换为“CapRep4.Web.ApplicationLog”public IQueryable GetApplicationLogsGrouped2{var x=from c in ObjectContext.ApplicationLogs让dt=c.LogDate组c通过新的{y=dt.Value.Year,m=dt.Value.Month,d=dt.Value.Day}进入mygroup选择new ApplicationLogStatistic{oApplicationLog=mygroup.Key,ProductCountz=mygroup.Count};返回x;}无法将类型“AnonymousType1”隐式转换为“CapRep4.Web.ApplicationLog”80 43 CapRep4.Web无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Linq.IQueryable”。是否存在显式转换?是否缺少强制转换?84 20 CapRep4.WebApplication Log是实体对象,但mygroup.key是Tkey?
public IQueryable<ApplicationLogStatistic> GetApplicationLogsGrouped()
{
    var x = // OP's code, except for select
        select new ApplicationLogStatistic 
                  { 
                       ApplicationLog = mygroup.Key, 
                       ProductCount = mygroup.Count() 
                  };
    return x;
}