C# Linq join和order by
我在一个表中有文件,在另一个表中有文件操作。我想获取Jeff对其采取行动的状态为4的最新文件。在SQL中,它如下所示: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
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。所有的答案都是有效的,但因为我使用了这个,标记为答案。非常感谢。是的。我不需要选择匿名类型。就我而言,我需要的是一种类型的文件。这是一个很好的观点。这是一个公平的假设,我不需要整个实体(我也不需要)。对于未来的访问者,您应该更新您的答案以反映这一变化。