2017-02-11 50 views
0

我有一个“类型预期”的错误,我不知道为什么。LinQ获得明显的字段与平均数错误

我的查询只是将3个表连在一起,同时试图获得不同的包和平均评级数。

的结果应该是这样的

| PackageName | Average Rating | 
| SG  |  4  | 
| USA  |  4  |  

 IQueryable<Recommendation> recommendationQuery = db.Recommendations; 
     IQueryable<Booking> bookingQuery = db.Bookings; 
     IQueryable<Package> packageQuery = db.Packages; 

     recommendationQuery = (from recommendationItem in recommendationQuery 
           join bookingItem in bookingQuery 
           on recommendationItem.BookingId equals bookingItem.BookingId 
           join packageItem in packageQuery 
           on recommendationItem.Booking.PackageId equals packageItem.PackageId 
           select recommendationItem).GroupBy(c => c.Booking.Package.PackageTitle) 
           .Select(c => new (c.Key, c.Average(d=>d.Rating))); 

类型预计发生在。选择(C =>新(.....

我可以知道我有错误的查询?

因为

1)I内加入我的所有3代表一起

2)假设我所有的表连接,我试图将它们组由PACKAGENAME到不同的名称的一个名称

3)我试图选择相同包装的评分的平均总和。

任何想法,如果有更好的解决方案呢?

database class diagram

Solution error

+0

'新(c.Key,c.Average(d => d.Rating))'' C#中有这样的语法吗?不AFAIK。你至少需要做新的推荐。您将结果存储回可查询的推荐内容中,因此您需要确保最后选择的语句匹配 – user3185569

+0

c.Key是c.Booking.Package.PackageTitle,但您只有c.Average。它不应该像c.Booking.Package.Average一样吗? – jdweng

+0

即使添加新建议书后,我仍然有错误,我去的例子是http://stackoverflow.com/questions/17289534/c-sharp-linq-remove-duplicate-items-and-calculate-average-值 –

回答

1

你需要回到结果存储到一个新的变量,以匹配新类型:

var results = from recommendationItem in recommendationQuery 
       join bookingItem in bookingQuery 
       on recommendationItem.BookingId equals bookingItem.BookingId 
       join packageItem in packageQuery 
       on recommendationItem.Booking.PackageId equals packageItem.PackageId 
       group recommendationItem 
       by recommendationItem.Booking.Package.PackageTitle 
       into grp 
       select new 
       { 
        PackageName = grp.Key, 
        AverageRating = grp.Average(d => d.Rating) 
       }; 
+0

你好,我仍然收到一个奇怪的错误,请看看我的主线程的图像 –

+0

哦,不要为这个错误而烦恼,你错过了一个括号在前面,我只在发布图片后才注意到,对不起。 –

+0

@YubinQiu现在查询查询,我认为这样比较容易理解。 – user3185569