2014-03-19 69 views
0

我有以下linq查詢。
如何修改查詢以僅爲CityFoo屬性返回不同的值?LINQ到SQL不同的值或組由

var query = from f in db.Foos 
      join b in db.Bars on f.IDFoo equals b.IDFoo 
      join fb in db.Fubars on b.IDBar equals fb.IDBar 
      select new MyViewModel { 
        IDFoo = f.IDFoo, 
        NameFoo = f.NameFoo, 
        CityFoo = f.CityFoo, 
        NameBar = b.NameBar, 
        NameFubar = fb.NameFubar }; 
+0

你期待其他屬性什麼樣的價值觀?每個CityFoo的第一個值? –

+0

是的,每個CityFoo的第一個值 – alex

+0

我認爲你需要添加更多的細節來確定你實際需要什麼,因爲實現「GROUP BY」或「DISTINCT」選擇會對你的結果產生影響(例如你想要什麼你的結果要改變),你可能會發現[這個問題](http://stackoverflow.com/questions/7325278/group-by-in-linq)對分組很有用(儘管你必須確定哪些聚合是合適的)或者[此問題](http://stackoverflow.com/questions/3519165/how-can-i-do-select-unique-with-linq)選擇不同的記錄。 – talegna

回答

0

我想你是缺少關於您的查詢的信息。 如果你想要在其他屬性上使用的第一個值,你需要告訴Linq

所以我猜你實際上想分組,然後採取第一個。

或者......是這樣的:

var query = from f in db.Foos 
      join b in db.Bars on f.IDFoo equals b.IDFoo 
      join fb in db.Fubars on b.IDBar equals fb.IDBar 
      group new { f, b, fb } by f.CityFoo into grp 
      let first = grp.FirstOrDefault() 
      select new MyViewModel { 
        IDFoo = first.f.IDFoo, 
        NameFoo = first.f.NameFoo, 
        CityFoo = grp.Key, 
        NameBar = first.b.NameBar, 
        NameFubar = first.fb.NameFubar };