2016-04-28 41 views
0

這裏是SQL語句:在EF中我正在查找重複項並執行自引用查詢,我該如何編寫此查詢?

SELECT f1.* 
FROM [File] f1 
where 1 < (select count(*) from [File] f2 where f1.FileName = f2.FileName) 
order by f1.FileName 

這是一個相當簡單的查詢在SQL做的,但我不知道怎麼做,在EF。我來回答最接近的是這個(給我的PK和計數),但我想完整文件記錄回:

from f1 in File 
join f2 in File on f1.FileName equals f2.FileName  
group f1 by f1.FileId into c 
where c.Count() > 1 
select new { FileId = c.Key, number = c.Count() } 

回答

1

您可以使用group join

from f1 in File 
join f2 in File on f1.FileName equals f2.FileName into g  
where g.Count() > 1 
select f1 
+0

謝謝!這看起來最合適。 LinqPad說它轉換爲: - 區域參數 DECLARE @@ p0 Int = 1 - EndRegion SELECT [t0]。[FileId],[t0]。[FileName],[t0]。[DirectoryDe​​faultStructureId],[ [ProjectId],[t0]。[AssetId],[t0]。[BusinessUnitId],[t0]。[UploadedOn],[t0]。[CreatorUserId] FROM [File] AS [t0] WHERE ( )選擇計數(*) 從[文件] AS [t1] WHERE [t0]。[文件名] = [t1]。[文件名] ))> @@ p0 –

0

我一般使用帶lambda語法的EF,但不能僅僅投影該對象?

from f1 in File 
join f2 in File on f1.FileName equals f2.FileName  
group f1 by f1.FileId into c 
where c.Count() > 1 
select c 
+0

感謝您的回覆。當我運行它時,這個語法實際上使我的LinqPad崩潰。當我看到它會產生的SQL時,至少說「有趣」。上面的Ivan的答案似乎更多的是我期待的和SQL看起來更好,但我非常感謝你的時間。 –