Выбор наиболее популярных Foo по количеству баров - PullRequest
1 голос
/ 08 октября 2009

Пересмотренный вопрос:
У меня есть фу.
У Фу много шипений.
У Fizz есть Foo.
В баре есть один шипучий напиток.

Я хочу найти foo, в котором есть шипение с наибольшим количеством баров, которые ссылаются на него с помощью LINQ.

Было бы идеально, если бы linq был совместим с NHibernate.Linq. Но это уже другая история.

Старый вопрос:
Я знаю - вопрос прост. Я всегда боролся с выбором SQL.

У меня есть foo.
У Фу много шипений.
У шипучих много баров.

Я хочу найти foo, у которого есть шипение с наибольшим количеством баров, используя LINQ.

P.s. извините за просьбу сделать мою работу.

Edit:
блин ... это другое. В баре есть шипение, в шипах нет бара. : /

Ответы [ 3 ]

3 голосов
/ 08 октября 2009
var foo = (from f in foos
           from fz in f.Fizzs
           let bCount = fz.Bars.Count()
           orderby bCount descending
           select f).First();

Это не обязательно очень эффективно, хотя это немного поможет, если Bars равен ICollection<Bar>, поскольку это позволит вам использовать свойство Count вместо метода расширения Count.

В этом примере, однако, я предположил, что Барс был IEnumerable<Bar>.

1 голос
/ 08 октября 2009
var orderedByMaxNumOfBars =
    from foo in foos
    let maxNumOfBars = foo.Fizzes.Select(fizz => fizz.Bars.Count()).Max()
    orderby maxNumOfBars descending
    select foo;

var fooWithFizzWithMostBars = orderedByMaxNumOfBars.FirstOrDefault();
0 голосов
/ 08 октября 2009

Это один из способов сделать это:

 var x = (from f in foos
         orderby f.fizzs.SelectMany(fi => fi.bars).Count() descending
         select f).First();

Редактировать: исправленный запрос не возвращает правильные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...