2013-03-12 90 views
0

我想用linq做一個子查詢,但它不起作用。 :-(我搜索谷歌的答案,但我不知道如何解決這個問題。linq的子查詢

這是我的SQL

string strSQL = @"SELECT a.ident, a.ben1 
       FROM pwdata a 
       WHERE a.iid = (SELECT max(b.iid) FROM pwdata b WHERE b.ident = a.ident)"; 

那怎麼我試圖使用LINQ做的,但是這是不正確的做法

var query = from i in maxxContext.pwdata 
      where i.IID = (SELECT max(b.iid) FROM pwdata b WHERE b.ident = a.ident) 
      orderby i.ident 

      select new CompareParts 
      { 
       PartNumber = i.ident, 
       PartName = i.ben1 
      }; 
      return query.ToList().Distinct(); 

你們誰能幫助我?

+0

查詢的最大值爲一個臨時變量,然後在最終的查詢使用它。 – GalacticCowboy 2013-03-12 13:00:19

回答

2

爲什麼你開始交織與普通SQL LINQ目前尚不清楚。它不喜歡的工作。

這應該工作,雖然:

var query = from i in maxxContext.pwdata 
      where i.IID == (pwdata.Where(b => b.ident == i.ident) 
            .Max(b => b.iid)) 
      orderby i.ident 
      select new CompareParts 
      { 
       PartNumber = i.ident, 
       PartName = i.ben1 
      }; 

或者,你可以做一個連接:

var query = from i in maxxContext.pwdata 
      join b in pwdata on i.ident equals b.ident into bs 
      where i.IID == bs.Max(b => b.iid) 
      orderby i.ident 
      select new CompareParts 
      { 
       PartNumber = i.ident, 
       PartName = i.ben1 
      }; 
+0

感謝您的幫助,但它仍然無法正常工作。 :-( – Jocelyn 2013-03-12 14:55:47

+0

var query = from i in maxxContext.pwdata where i.IID ==(maxxContext.pwdata.Where(b => b.ident == i.ident) .Max(b => b.IID) ) 排序依據i.ident 選擇新CompareParts { PARTNUMBER = i.ident, 零件名稱= i.ben1 }; – Jocelyn 2013-03-12 14:56:05

+0

@Jocelyn:嗯,這給了我們沒有更多的信息,什麼是錯的,我不能沒有更多的幫助。如果你提出更多的代碼,我建議你編輯你的問題 - 評論是不適合展示代碼。 – 2013-03-12 14:56:12