2015-06-17 57 views
1

我有一個表中的文件和另一個文件中的文件操作。我想,傑夫已採取行動,對具有4.在SQL狀態最近的文件,看起來像這樣:Linq加入和順序

SELECT TOP 1 files.* 
FROM files 
LEFT OUTER JOIN fileActions ON files.FileId = fileActions.FileId 
WHERE fileActions.ActionTaker = 'Jeff' 
    AND files.FileStatus = 4 
ORDER BY fileActions.ActionDate DESC 

我將如何表達的Linq該查詢?

我已經嘗試了很多東西,但我甚至無法編譯它。我覺得這是我來迄今最接近,但很明顯「頂」是不是一個LINQ語法詞,所以我有一個很好的路要走:

var file = from f in context.Files 
      join fa in context.FileActions on f.FileId equals fa.FileId 
      where fa.ActionTaker == "Jeff" 
      where f.FileStatus == 4 
      orderby fa.ActionDate descending 
      select top 1 f; 

任何幫助表示讚賞。

+1

你的意思是:'var文件=(your_query)。取( 1)'? –

+0

嘆息...是的。是的,我願意。謝謝。我跟着First orr去了,但是一旦我把所有的東西都包裹在parens裏,世界就是我的牡蠣。 – Forklift

回答

1

試試這個:

var file = (from f in context.Files 
      join fa in context.FileActions on f.FileId equals fa.FileId 
      where fa.ActionTaker == "Jeff" && f.FileStatus == 4 
      orderby fa.ActionDate descending 
      select f).FirstOrDefault(); 
+0

男人,我太親近了!我習慣於使用lambda表達式,所以我沒有考慮包裝linq。 – Forklift

+0

所有的答案都是有效的,但是因爲我使用了這個答案,所以標記爲答案。謝謝! – Forklift

1

試試這個

var file = (from f in context.Files 
      join fa in context.FileActions on f.FileId equals fa.FileId 
      where fa.ActionTaker == "Jeff" 
      && f.FileStatus == 4 
      orderby fa.ActionDate descending 
      select f).first(); 
+0

謝謝!它可能爲空,所以FirstOrDefault()適合我的情況。 – Forklift

3

如果我明白你的問題......

var file = (from f in context.Files 
      join fa in context.FileActions on f.FileId equals fa.FileId 
      where fa.ActionTaker == "Jeff" && f.FileStatus == 4 
      orderby fa.ActionDate descending 
      select new { Value1 = fa.Id, Value2 = f.Id }).FirstOrDefault(); 
+0

你做到了。我不需要選擇一個匿名類型。對我而言,我需要一種類型的文件。 – Forklift

+0

是的..我使這個優化你的選擇... –

+0

這是一個很好的觀點。這是一個公平的假設,我不需要整個實體(我不這樣做)。對於未來的訪問者,您應該更新您的答案以反映該更改。 – Forklift