2017-02-11 20 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