C# Linq join和order by

C# Linq join和order by,c#,sql,linq,C#,Sql,Linq,我在一个表中有文件,在另一个表中有文件操作。我想获取Jeff对其采取行动的状态为4的最新文件。在SQL中,它如下所示: 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.Ac

我在一个表中有文件,在另一个表中有文件操作。我想获取Jeff对其采取行动的状态为4的最新文件。在SQL中,它如下所示:

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中表达相同的查询

我尝试了很多方法,但我甚至无法编译它。我觉得这是我迄今为止最接近的一次,但显然“top”不是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;
感谢您的帮助。

尝试以下方法:

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();
试试这个

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();

如果我理解你的问题

 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();

你的意思是:
var文件=(你的查询)。拿(1)
?叹气。。。对是的。非常感谢。我选择了第一道菜,但一旦我把所有的东西都用帕伦斯包装好,世界就是我的牡蛎。谢谢!它可能是空的,所以FirstOrDefault()适合我的情况!我习惯于使用lambda表达式,所以我没有考虑包装linq。所有的答案都是有效的,但因为我使用了这个,标记为答案。非常感谢。是的。我不需要选择匿名类型。就我而言,我需要的是一种类型的文件。这是一个很好的观点。这是一个公平的假设,我不需要整个实体(我也不需要)。对于未来的访问者,您应该更新您的答案以反映这一变化。