2009-10-08 62 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();