这是一个基本问题。我已经设置了基本的SL4 / RIA项目,我想在域服务中创建一个新方法并从中返回一些数据。我不确定这样做的最简单的方法..我应该把它包装在ToList()中吗?我不清楚如何处理这个创建的匿名类型..返回这些数据的最简单方法是什么?
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&lt; AnonymousType#1&gt;'到'System.Linq.IQueryable&lt; CapRep4.Web.ApplicationLog&gt;'。存在显式转换(您是否缺少演员?)58 20 CapRep4.Web
答案 0 :(得分:3)
尝试使用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);
}
答案 1 :(得分:3)
匿名类型与任何其他类一样,但它是由编译器创建的。编译器生成的内容类似于:
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的定义匹配的自定义类,而是要保持强类型。然后,您将使用它:new MyClass { Key = myGroup.Key, ProductCount = mygroup.Count() }
。
答案 2 :(得分:1)
您需要为投影创建自己的类。
public class ApplicationLogStatistic
{
public ApplicationLog ApplicationLog { get; internal set; }
public int ProductCount { get; internal set; }
}
...
public IQueryable<ApplicationLogStatistic> GetApplicationLogsGrouped()
{
var x = // OP's code, except for select
select new ApplicationLogStatistic
{
ApplicationLog = mygroup.Key,
ProductCount = mygroup.Count()
};
return x;
}