2009-08-14 15 views
0

私はLINQ-to-SQLを次のSQL用に作成する方法を理解しようとしています。どんな助けもありがとう。応答のC#コードが優先されます。また、簡潔にするために、PKey以外のインデックスは示されていません。LINQ to SQL - グループ化する

テーブルスキーマ:

CREATE TABLE [dbo].[FileHashes](
[ID] [uniqueidentifier] NOT NULL, 
[FileName] [nvarchar](255) NULL, 
[FileSize] [bigint] NULL, 
[FileDirectory] [nvarchar](255) NULL, 
[SHA-1] [nchar](40) NULL, 
[MD5] [nchar](32) NULL, 
[CRC32] [nchar](8) NULL, 
CONSTRAINT [PK_FileHashes] PRIMARY KEY CLUSTERED 
(
[ID] ASC 
)) ON {PRIMARY] 

T-SQL:

select COUNT(ID) as DupCount, FileName from FileHashes 
group by [SHA-1], FileName, FileSize 
having COUNT(ID) > 1 
order by DupCount desc, FileSize desc 

私はまだないが、まだしかし、近づいこれで取得しています:事前に

from f in FileHashes 
group f by new { f.SHA_1, f.FileName, f.FileSize } into g 
orderby g.Key.FileSize descending 
where g.Count() > 1 
select new { g.Key.SHA_1, g.Key.FileName, g.Key.FileSize } 

おかげで、 - エド

+3

これをSQLとしてそのまま残し、それをL2Sに変換しないことができます。 – Kredns

+0

これでL2Sをやっているときに何が起こるのですか? – klabranche

答えて

0

試してみてください。私は、これはあなたが希望するものであると考えてい

​​
2

が、これはそれがあるべきあなたのクエリを...トランスポーズ

var orders = 
     from p in Orders 
     group p by new {p.CustomerID, p.ShipCity} into g 
     let OrderCount = g.Count() 
     orderby OrderCount descending, g.Key.ShipCity descending 
     where OrderCount > 2 
     select new 
      { 
       CustomerID = g.Key.CustomerID, 
       City = g.Key.ShipCity, 
       NoOfOrders = g.Count() 
      };  

Ordersテーブル、Northwindデータベースのために働く

var files = 
     from f in FileHashes 
     group f by new { f.SHA_1, f.FileName, f.FileSize } into g 
     let DupCount = g.Count() 
     orderby DupCount, g.Key.FileSize descending 
     where DupCount > 1 
     select new 
     { 
      g.Key.SHA_1, 
      g.Key.FileName, 
      g.Key.FileSize 
     };