2016-10-27 13 views
-2

以下のクエリはSQL Serverにあります。SQL Serverクエリをlinqに変換する方法

どのように同じのlinqクエリを記述するのですか?あなたが期待するように、すべてのフィールドを持つ匿名型になり

declare @id int=42; 

select 
    ac.[AuditID], ac.[Type], ac.[TableName], ac.[PK], ac.[FieldName], 
    ac.[OldValue], ac.[NewValue], ac.[UpdateDate], ac.[UserName] 
from 
    [auditProducts] ac 
left join 
    [auditProducts] ac2 on ac2.[AuditID] = ac.[AuditID] 
         and ac2.[PK] = ('Id=' + cast(@id as varchar(1000))) 
left join 
    [auditProducts] ac3 on ac3.[PK] = ac.[PK] 
         and ac3.[FieldName] = 'Product_Id' 
         and ac3.[NewValue] = @id 
where 
    ac.[FieldName] not in ('Product_Id', 'Id') 
+0

あなたはまだ何を試みましたか?あなたのコードに直面するいくつかの問題を投稿してください。 – Viplock

+0

@Viplock問題文はシンプルですが、このSql ServerクエリのLinqバージョンは何ですか:) –

+3

SQLをポストして変換を求めないでください。少なくともクラスモデルを表示して、ナビゲーションプロパティと関連の多重度を確認します。また、どのタイプのLINQをターゲットにしているのか(エンティティには?)、*と*は自分の最初の努力を示します。彼らはあなたが思うかもしれないよりも、私たちにもっと多くを明確にします。 –

答えて

0

チェックとして、ある変換がJoinfilteringを投稿してください。 Self JoinsauditProductsAuditIDおよびPKを使用する。

var result = auditProducts.Join(auditProducts, ac => ac.AuditID, ac2 => ac2.AuditID, (ac,ac2) => new {ac,ac2}) // Self Join using AuditID 
       .Where(a => a.ac2.PK == ("Id=" + <Convert @id to string>) // Apply Where class on PK 
       .Join(auditProducts,acFirst => acFirst.ac.PK,ac3 => ac3.PK,(acFirst,ac3) => new {acFirst.ac,acFirst.ac2,ac3}) // Self Join using PK 
       .Where(a => a.ac3.FieldName == "Product_Id" && a.ac3.NewValue == <@id - Value Placeholder>) // Apply Where Filter on FieldName and NewValue 
       .Select(a => new {a.ac.AuditID,a.ac.Type,a.ac.TableName, a.ac.PK,a.ac.FieldName,a.ac.OldValue,a.ac.NewValue,a.ac.UpdateDate, a.ac.UserName}); // Final Selection of various fields in the Result as Anonymous type 
関連する問題