2009-10-08 51 views
1

重述的问题:
我有foo。
Foo有很多嘶嘶声。
Fizz有Foo。
酒吧有一个嘶嘶声。根据酒吧数量选择最受欢迎的Foo

我想找到foo,它具有使用LINQ引用它的最高计数条。

这将是完美的,如果LINQ将NHibernate.Linq兼容。但这已经是另一回事了。

老问题:
我知道 - 问题很简单。我一直在努力与SQL选择。

我有foo。
Foo有很多嘶嘶声。
嘶嘶声有很多酒吧。

我想找到foo,它具有使用LINQ的酒吧的最高计数。

P.s.抱歉要求做我的工作。

编辑:
该死的......这是不同的。酒吧有嘶嘶声,嘶嘶声没有酒吧。 :/

+1

请您重新说明问题,您的编辑使其不清楚。 – 2009-10-08 10:45:39

+0

当然......我会的。 – 2009-10-08 10:48:33

+0

嘶嘶声有一个Foo吗?他们引用Foo吗? – Nicholas 2009-10-08 12:07:52

回答

3
var foo = (from f in foos 
      from fz in f.Fizzs 
      let bCount = fz.Bars.Count() 
      orderby bCount descending 
      select f).First(); 

这不一定是非常有效的,尽管这有点帮助,如果酒吧是一个ICollection<Bar>,因为这将允许您使用Count属性,而不是伯爵扩展方法。

但是在这个例子中,我假定Bars是IEnumerable<Bar>

+0

该死的,我正准备发布完全相同的答案... :-P – Konamiman 2009-10-08 10:28:38

+0

我说我的问题错了。请检查一遍。 :) – 2009-10-08 10:33:53

0

这是做这件事:

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

编辑:固定的查询返回不正确的结果。

+0

重申的问题... – 2009-10-08 11:14:34

1
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();