2016-10-27 3 views
-2

Ich habe unter Abfrage in SQL Server.Wie SQL Server-Abfrage zu Linq konvertieren

Wie schreibe ich linq Abfrage für die gleiche?

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

Welchen Versuch haben Sie bisher unternommen? posten Sie ein Problem mit Ihrem Code. – Viplock

+0

@Viplock Problembeschreibung ist einfach, was ist die Linq-Version dieser Sql-Server-Abfrage :) –

+3

Bitte nie nur post SQL und fragen Sie nach Konvertierung. Zeigen Sie zumindest ein Klassenmodell, so dass Navigationseigenschaften und die Vielzahl von Assoziationen sichtbar sind. Erzähle außerdem, auf welche Art von LINQ du zielst (auf Entitäten?), * Und * zeige deine eigenen ersten Bemühungen. Sie erklären uns mehr, als Sie vielleicht denken. –

Antwort

0

prüfen As-Ist-Konvertierung, die in anonymen Typ führen mit allen Feldern schreiben Join und filtering wie Sie es erwarten. Es Self Joins die auditProducts unter Verwendung AuditID und 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