2017-02-10 5 views
1

私はC#の初心者です。私はSQLstatementに精通していますが、LINQではうまくいきません。今私がする必要があるのは、LINQ文クエリbooking.PackageIdAvG(booking.Rating)をグループ化することです。booking.Packageです。 (私は異なったPackageIDに従って平均格付けを表示する必要があります)。ASP.NETでLINQを使用して平均とグループをクエリする方法C#

Here is my booking table

は、私はすべての情報を表示するためのリストビューを使用すること

<asp:ListView 
    ID="lvBookings" runat="server" 
    DataKeyNames="BookingId" 
    ItemType="TravelPlannerSystem.Models.Booking" 
    SelectMethod="GetFeedbacks"> 

これはGetFeedbacks

public IQueryable<Booking> GetFeedbacks() 
{ 
    var db = new TravelPlannerContext(); 
    var query = from booking in db.Bookings 
       group booking by booking.PackageId into grouping 
       select new { 
       PackId = grouping.Key, 
       AverageRating = grouping.Average(ed => ed.Rating) 
       }; 
    return query; 
} 

それ維持のための背後に私のコードであることは私にエラーを与え、私はされていますオンラインで2日間検索しています。私は本当にこれを変える方法を知らない。誰もここに助けてもらえますか?あなたの投影(select一部)をPackIdAverageRatingと匿名型であるnew {}を作成しています:

+0

エラーが表示されたので、それをクリアしてください。 –

答えて

2

理由は、あなたの関数がIQueryable<Booking>の戻り値を期待していますが、IQueryable<AnonymousType>に戻ってきているということです。

この新しいタイプはBookingタイプではないため、失敗しています。その後、あなたは何をすべき

、匿名型を返すことができないとして(と私はここにダイナミクスを使用することをお勧めではないと思う)新しいクラスを作成することですと:

public IQueryable<YourClass> GetFeedbacks() 
{  
    return from booking in (new TravelPlannerContext()).Bookings 
      group booking by booking.PackageId into grouping 
      select new YourClass // Now you are projecting the expected type 
      { 
       PackId = grouping.Key, 
       AverageRating = grouping.Average(ed => ed.Rating) ?? 0 
      }; 
} 

参照してください。どのように再発値と投影が同じタイプのものであるか

+0

ありがとうございます、ギルダー。しかし、私のファイル内であなたのコードを置き換えた後、私は(ed => ed.Rating)の下で新しいエラーが出て、 "暗黙的に型doubleを変換できないのですか?明示的な変換が存在します(キャストがありませんか?)。 –

+1

エラーはそれを説明しています...あなたの 'AverageRating'フィールドのタイプは何ですか?あなたの 'Rating'フィールドのタイプは何ですか?いずれにしても更新を参照してください:) –

+0

ここに、エンティティフレームワークを作成して生成された評価フィールドがあります:public Nullable 評価{get;セット; }。ここに私自身によって設定された私のaverageRatingフィールドがあります:public double AverageRating {get;セット; } –

-1

ビューに渡す前にこのクエリーを変換してみてください。 Tolist()を使用して変換します。

+1

OPを手助けするサンプルコードを追加してください。 –

関連する問題