2015-06-17 3 views
1

У меня есть файлы в одной таблице и файлы в другом. Я хочу, чтобы получить самый последний файл, который Джефф принимает меры по этому имеет статус 4. В SQL, который выглядит следующим образом:Linq join and order by

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

Вы имеете в виду: 'вар файл = (your_query) .Снять (1) '? –

+0

Вздох ... Да. Да. Спасибо. Я пошел с FirstOrDefault, но как только я завернул все это в 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

Мужчина, я был так близок! Я привык использовать выражение лямбда, поэтому я не думал об обертывании 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