2013-04-23 3 views
4

Я пытаюсь выработать следующее.Заявление Linq с двумя предложениями

public class Competition 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public IList<ResultInfo> ResultInfos { get; set; } 
    public IList<Event> ChildEvents { get; set; } 
} 


public class ResultInfo 
{ 
    public int Id { get; set;} 
    public string ResultInfoName { get; set;} 
    public int Season { get; set; } 
} 

public class Event 
{ 
    public int Id { get; set; } 
    public string EventName { get; set; } 
    public IList<ResultInfo> ResultInfos { get; set; } 
} 

Я пытаюсь выполнить запрос, как показано ниже, чтобы попытаться получить сезон «2013» информации о результатах с соревнований и событий. Если кто-то знает, посоветуйте.

if (year.HasValue) 
{ 
    model = model.Where(x => x. ??   
} 

ответ

1

Вы можете сделать:

var competitions = new Competition(); // Populated competition class 

var results = (from c in competitions 
       from e in c.ChildEvents 
       from ri in e.ResultInfos 
       where ri.Season == 2013).ToList(); 

Неясно, почему вам нужен дополнительный where, но вы можете расширить его и другой пункт, такие как

where ri.Season == 2013 && EventName == "Event" 

Как @ von.v имеет указав, что вы можете получить доступ к ResultInfos непосредственно через класс Конкурса, поэтому его можно упростить с помощью:

var results = (from c in competitions 
        from ri in c.ResultInfos 
        where ri.Season == 2013).ToList(); 
+0

Вы бы тогда нужно для конкатенации результатов ResultInfos, хранящихся непосредственно в объекте Конкурса. (competition.ResultInfos.Where (ri => ri.Season == 2013)); –

+0

как насчет 'ResultInfo' 'в' Конкурсе'? –

+0

@vonv - хорошее место. –

0

Я не понимаю, что вам нужно? Если вы хотите конкуренции, которые имеют события с результатами Infos в 2013 году и привести Infos также в 2013 году вы можете сделать это:

model.Where(c => c.ChildEvents 
        .SelectMany(ce => ce.ResultInfos) 
        .Where(ri => ri.Season == 2013).Count() > 0 
      && 
      c.ResultInfos.Where(ri => ri.Season == 2013).Count() > 0) 
    .ToList(); 

Но я не уверен, что я undersand, что вам нужно

Смежные вопросы