2015-01-05 58 views
1
var seasonPlayer = (from SeasonPlayer in db.SeasonPlayerSet 
        orderby SeasonPlayer.StatisticsPlayer.Average(x => x.STP_timeplay.Ticks) descending 
        select SeasonPlayer).ToList(); 

的SeasonPlayer有StatisticsPlayer的ICollection的,所以我希望得到一个平均的时间花在法庭下令由STP_timeplay这是时间跨度的典型值下降。我不能通过STP_timeplay获得平均值,因为它不是小数,所以我尝试通过Ticks得到平均值。它抛出一个异常:LINQ查询NotSupportedException异常排序依据平均时间跨度

The specified type member 'Ticks' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported. 

回答

1

的问题是,LINQ到实体查询提供不能够将您的LINQ转换成它连接到统计的SQL查询播放器,平均时间播放,按季节播放器分组。

既然你似乎是遍历整个赛季球员,如果记录的数量不是太大,你可以把所有到内存这就像这样:

var seasonPlayer = db.SeasonPlayerSet 
         .Include(sp => sp.StatisticsPlayer) 
         .ToList() 
         .Select(sp => new {SeasonPlayer = sp, Average = sp.StatisticsPlayer.Average(stp => stp.STP_timeplay.Ticks)}) 
         .OrderByDescending(sp => sp.Average) 
         .Select(sp => SeasonPlayer) 
         .ToList(); 
+0

我更正了'Include(sp => sp.StatisticsPlayer)'到'Include(“StatisticsPlayer”)',因为它返回了错误。我没有注意到SeasonPlayer的一些没有使用StatisticsPlayer,所以它返回“Sequence contains no elements”,我添加了一个条件'Average = sp.StatisticsPlayer.Count()== 0? 0:sp.StatisticsPlayer.Average(stp => stp.STP_timeplay.Ticks)'。现在没事了。 Thx寻求帮助! – luki9696

+0

很高兴为您服务。 [强类型'包含'重载](http://stackoverflow.com/questions/6102909/entity-framework-include-strongly-typed)是可取的 - 你只需要添加'使用System.Data.Entity;'。此外,平均值需要一些数据来处理。 – StuartLC

+1

按照你的建议,我改回到'Include(sp => sp.StatisticsPlayer)'''使用System.Data.Entity;''。现在它也是工作。 Thx这个提示! – luki9696

1

试试这个: -

var seasonPlayer = db.SeasonPlayerSet.ToList() 
        .OrderByDescending(x => x.StatisticsPlayer 
              .Average(z => z.STP_timeplay.Ticks); 
+0

我“序列不包含任何元素”时在最后添加.ToList()以获取SeasonPlayer的ICollection。 – luki9696

+0

@ luki9696 - 您已将ToList()添加到表格或SeasonPlayer中?请注意,该消息表示收集中没有数据。 –

+0

这是我的不好。我尝试了给我StuartLC的解决方案,我得到了同样的错误。我纠正了他的解决方案,现在我得到正确的结果。我试图给你的解决方案添加相同的条件,但我不知道如何正确添加它。很高兴看到你的想法。 – luki9696