通过数量选择最受欢迎的Foo

时间:2009-10-08 10:14:03

标签: c# sql linq

重申问题:
我有foo Foo有很多嘶嘶声 Fizz有Foo 酒吧有一个嘶嘶声。

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

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

旧问题:
我知道 - 问题很简单。我一直在努力使用sql选择。

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

我想找到foo,它使用LINQ具有最高数量的条形码。

P.S。对不起要求做我的工作。

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

3 个答案:

答案 0 :(得分:3)

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扩展方法。

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

答案 1 :(得分: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();

答案 2 :(得分:0)

这是一种方法:

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

编辑:修复查询未返回正确的结果。