【问题标题】:Selecting most popular Foo by count of Bars按条数选择最受欢迎的 Foo
【发布时间】:2009-10-08 10:14:03
【问题描述】:

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

我想找到 foo,它的嘶嘶声与使用 LINQ 引用它的条数最多。

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

老问题:
我知道 - 问题很简单。我一直在为 sql 选择而苦苦挣扎。

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

我想找到 foo,它使用 LINQ 的条数最多。

附:很抱歉要求做我的工作。

编辑:
该死……不一样。酒吧有嘶嘶声,嘶嘶声没有酒吧。 :/

【问题讨论】:

  • 能否请您重述问题,您的编辑使问题不清楚。
  • fizz 有一个 Foo 吗?他们引用 Foo 吗?
  • 是的。 Fizz 有一个 Foo。我会把它添加到问题中。

标签: c# sql linq


【解决方案1】:
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>

【讨论】:

  • 该死,我正要发布完全相同的答案...:-P
【解决方案2】:
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();

【讨论】:

    【解决方案3】:

    这是一种方法:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多