У меня есть программа ниже:передовые группировки и агрегации с помощью LINQ
void Main()
{
List<Online_video_for_programmers> current_year_videos = new List<Online_video_for_programmers>()
{
new Online_video_for_programmers
{
video_name="websocket for fortran programmers",
season=2,
seasontype=1,
year=2012
},
new Online_video_for_programmers
{
video_name="cross site scripting for facebook addicts",
season=3,
seasontype=2,
year=2012
},
new Online_video_for_programmers
{
video_name="Artificial intelligence for self aware robots",
season=1,
seasontype=1,
year=2012
}
,
new Online_video_for_programmers
{
video_name="Artificial intelligence for self aware robots",
season=3,
seasontype=1,
year=2012
},
new Online_video_for_programmers
{
video_name="Artificial intelligence for adavanced robots",
season=5,
seasontype=1,
year=2012
},
new Online_video_for_programmers
{
video_name="Yoga for programmers",
season=2,
seasontype=2,
year=2012
},
new Online_video_for_programmers
{
video_name="Yoga for programmers",
season=3,
seasontype=2,
year=2012
}
};
//Last years videos sold
List<Online_video_for_programmers> last_year_videos = new List<Online_video_for_programmers>()
{
new Online_video_for_programmers
{
video_name="websocket for fortran programmers",
season=2,
seasontype=1,
year=2011,
},
new Online_video_for_programmers
{
video_name="cross site scripting for facebook addicts",
season=3,
seasontype=1,
year=2011,
},
new Online_video_for_programmers
{
video_name="Artificial intelligence for self aware robots",
season=2011,
seasontype=3,
year=2011,
}
,
new Online_video_for_programmers
{
video_name="Yoga for programmers",
season=4,
seasontype=2,
year=2011,
},
new Online_video_for_programmers
{
video_name="Yoga for programmers",
season=2,
seasontype=2,
year=2011
}
};
}
// Define other methods and classes here
public class Online_video_for_programmers
{
public int seasontype {get;set;} //this can be the id of a year, a quater or month Tyepes are 1: months, 2, for quarters, 3 for year
public int season {get;set;} // when season type is 1, season =1 means january.
//When season type is 2, season=3 means 3rd quater. When seasontype is 3, season =2011 or 2010 etc...
public string video_name {get;set;} //The nambe of the video
public int year {get;set;} // The year the video was published
}
Я хотел бы использовать current_year_videos и last_year_videos, чтобы извлечь какие названия, где опубликованы в прошлом году и не в этом году. Для этого я использую следующий код:
var result=current_year_videos.Concat(last_year_videos).GroupBy(g=> new { seasontype,season,video_name }).Select(s=> new Online_video_for_programmers{ seasontype=s.Key.seasontype, season=s.Key.season, video_name=s.Key.video_name });
Код выше дает мне те, которые были произведены как в этом году и в прошлом году, так что я могу легко найти недостающие из них.
И вот в чем проблема. Видеоролик «Искусственный интеллект для самопознающего робота» был выпущен в течение всего года в 2011 году, в то время как в 2012 году было 3 ежемесячных производства. Я не хочу видеть это как отсутствующее в 2012 году. Его следует пропустить только в том случае, если он не был выпущен вообще в 2012 году. Вопрос в том, как настроить мой запрос, чтобы включить это условие в результат. Я потратил некоторое время на то, чтобы понять разные вещи без успеха.
Надеюсь, кто-то может помочь.
Большое спасибо заранее
Это выглядит блестяще ... Я дам ему попробовать. Большое спасибо. –
Уважаемый Лазыберовский, есть проблема с этим кодом. Он не должен сообщать «Искусственный интеллект для самопознающих роботов» как отсутствующий. Он был выпущен в 2011 году. Его следует указывать только как отсутствующий, если он вообще не был произведен. –
@MeelfanBmfp nope, в 2012 году он имеет сезоны '1,3,5'. Но в 2011 году сезон назывался '2011', таким образом, это другое видео, и оно отображается в результатах. Может быть, у вас есть опечатка в ваших данных образца? –