Для получения первых 10:
(from x in Titles
where x.Instant.Available==true
where x.AverageRating>=4.0
orderby x.AverageRating descending
select new {x.Name, x.Rating, x.AverageRating, x.ShortSynopsis}
).Take(10)
Для фильтрации по одному жанру (не то, что вы хотите ...):
from g in Genres
from t in g.Titles
where g.Name == "Horror"
where t.Instant.Available==true
where t.AverageRating >=4.0
orderby t.AverageRating descending
select new {t.Name, t.Rating, t.AverageRating, t.ShortSynopsis}
Однако, вы хотели иметь несколько жанров НО OData не поддерживает Выбрать много запросов , поэтому содержит сбои или пытается ИЛИ название жанра.
Ниже не удается , потому что содержит много ...
var q1 = from g in Genres
from t in g.Titles
where g.Name.Contains("Horror")
where t.Instant.Available==true
where t.AverageRating >=4.0
orderby t.AverageRating descending
select new {t.Name, t.Rating, t.AverageRating, t.ShortSynopsis};
Для фильтрации по нескольким жанрам я обнаружил, что вы можете использовать Concat или Union запрос (в LinqPad обязательно измените на C # операторы, а не выражения):
var q1 = from g in Genres
from t in g.Titles
where g.Name=="Horror"
where t.Instant.Available==true
where t.AverageRating >=4.0
orderby t.AverageRating descending
select new {t.Name, t.Rating, t.AverageRating, t.ShortSynopsis};
var q2 = from g in Genres
from t in g.Titles
where g.Name=="HBO"
where t.Instant.Available==true
where t.AverageRating >=4.0
orderby t.AverageRating descending
select new {t.Name, t.Rating, t.AverageRating, t.ShortSynopsis};
var concat = q1.ToList().Concat(q2);
//var union = q1.Union(q2);
Объединение двух запросов приведет к удалению дубликатов, но это то, что вам нужно. Если я правильно вас понял, вам нужны фильмы, которые есть только в обоих жанрах?
В этом случае вы захотите использовать Concat, который будет возвращать все записи.
Теперь вам просто нужно найти записи, которые есть в запросе более одного раза, и у вас есть результаты:
var results = from c in concat
group c by c.Name into grp
where grp.Count() > 1
select grp;