0

私はいくつかのOdataを学び始めたばかりで、私が行ったいくつかのクエリで助けが必要です。

Linqクエリの例を2〜3個取り上げましょう。 (注:クエリのリスト)

      1) var one  =  Users.Single(s => s.ID == 1).Sources.Where(s =>s.Genre.Name == "Sport").ToList();

      2) var second = TvSchedules.Where(s => s.Date.Day == DateTime.Today && s.Source.Type == "Channel"). Select(s => new {s.Media.Title,s.Media.Details.Description,s.Media.Images.FirstOrDefault(a=>a.ID==s.Media.ID).Link, s.Source.Sign}).ToList();

      3) var third = TvSchedules.Where(s => s.Date < week && s.Media.Metadata.Select(a => a.IsHD).Contains(true)).Select(s => new { s.Media.Title, s.Media.Details.Description, s.Media.Images.FirstOrDefault().Link, s.Media.Metadata.FirstOrDefault().PriceSD, s.Media.RTRating }).ToList();

それらのクエリは何ですか? (注:クエリのリストの説明)

1) I am selecting all Sources from User with ID=1 where source genre = 'Sport' ( I use User and Sources database tables )

2) I am querying only TVSchedules from Today where TVSchedules.Sources.Name = 'Channel' and I am selecting from TvSChedules.Media ( Title ), TvSchedules.Media.Details( Description), TvSchedules.Media.Images( Link ), TvSchedules.Source.Sign       

  In TvSchedules database table I have 2 FK ( MediaID, SourceID )

3) Like the second one, but I add some filters. I want to check if TvSchedules.Media.Metadata.isHd ==true 

私の問題 (注:上記のクエリに基づく問題)

問題A)これらのクエリはLinqで正しいですか?多対多の関係についてはよくわかりません。

たとえば、メディアとメタデータの間に多対多の関係がある3番目の例では( TvSchedules.Where(s => s.Date <week && s.Media.Metadata.Select(a => a.IsHD))。含む(true)) )。日付が週未満でMedia.Metada.isHd=trueのTvSchedulesのみを選択する必要があります。

私のTvSchedulesテーブルは次のようになります

ID     MediaID    SourceID   Date
--     ------     --------   ----

問題B)ODATA(オープンデータプロトコル)クエリでこれらのクエリを変換するにはどうすればよいですか?

    1)  /Users(1)/AvailableSources?&filter=Genres eq 'Sport'
    2)  /TvSchedules?&filter=Date eq '@today'?$expand=Media,Details,Images?$select=Title,Description,Link 
    3) ?

ありがとうございました

4

1 に答える 1

0

この種のクエリは、最初のクエリを除いて、構文的にも意味的にも正しいものですが、読みやすさ、パフォーマンス、およびodataフィルター基準の作成が難しいために問題があります。

私はその道を歩きました、そしてあなたが前に進むほど、感じる痛みが増しました。私の推奨事項は、それらのSQLビューを作成することです。

  1. シンプルなので大丈夫です。
  2. Today_TV_ScheduleSQLビューを作成します
  3. Today_HDTV_Scheduleを作成します(Today_TV_Scheduleを使用します)

この後、エンティティをマップすると、簡単にできるようになります。

var second = TvSchedules;
var third = HdTvSchedules;

ODataクエリも簡単になります。私の推薦を考慮してください。

幸運を!

于 2012-12-06T17:07:10.440 に答える