2016-05-17 17 views
0

Ich habe versucht, diese SQL-Anweisung in eine Linq zu konvertieren, wie ich versuche, die Funktionalität in ein Programm zu verschieben. HierSQL Query zu Linq zu Entities - C#

ist die SQL-Anweisung

SELECT cust.sg_group_name      AS customer, 
    (SELECT Sum(du.used_space) 
    FROM sg_groups AS clnt 
      LEFT JOIN client_disk_usage AS du 
        ON clnt.sg_group_id = du.sg_group_id 
        AND clnt.group_role_id = 3 
    WHERE clnt.parent_group_id = cust.sg_group_id 
      AND du.day_of_month = 15 
      AND du.month_of_year = 05 
      AND du.used_space_year = 2016) AS disk_usage 
FROM sg_groups AS cust 
WHERE cust.group_role_id = 2 
ORDER BY cust.sg_group_name 

Wesentlichen der Ausgang ist nur eine Liste mit zwei Spalten

customer  disk_usage 
Customer1 136401537652 
Customer2 42208008210 

Wenn möglich möchte ich nur diese Aussage auf eine Linq konvertieren. Ich habe versucht, die Abfrage in LinqPad zu setzen, aber es scheint nicht von SQL zu Linq konvertieren zu wollen (kommt nur mit einer leeren weißen Seite). Ich hatte selbst einen Fehler bei der Abfrage, aber ich bekomme entweder etwas, was nicht funktioniert, oder eine falsche Anzahl von Ergebnissen.

Wenn jemand irgendwelche Vorschläge hat, wäre das großartig!

+1

für LEFT JOIN refer http://stackoverflow.com/questions/700523/linq-to-sql-left-outer-join – Anil

Antwort

0

Entschuldigung für die verzögerte Antwort. Ich habe @Anil als Antwort markiert, da dies der ist, der mir geholfen hat, die Antwort zu finden. Ihre Lösung hat @Sathish funktioniert, aber sie kann in einem einzigen Befehl ausgeführt werden. Hier ist meine endgültige Lösung. Vielen Dank für deine Hilfe!

storeGridUsage = (
       from cust in db.sg_groups 
       from client in db.sg_groups 
       join du in db.client_disk_usage on client.SG_GROUP_ID equals du.SG_GROUP_ID 
       where client.GROUP_ROLE_ID == 3 
       where client.PARENT_GROUP_ID == cust.SG_GROUP_ID && du.DAY_OF_MONTH == day && du.MONTH_OF_YEAR == month && du.USED_SPACE_YEAR == year 
       where cust.GROUP_ROLE_ID == 2 
       orderby cust.SG_GROUP_NAME 
       group new {cust, du} by cust.SG_GROUP_NAME 
       into g 
       select new StoreGridUsage 
       { 
        CustomerName = g.Key, 
        DiskUsageInBytes = g.Sum(o => o.du.USED_SPACE) 
       }).ToList(); 
0

disk_usage (Unterabfrage) ist ein bisschen komplizierter Teil. Umgerechnet hier. Probieren Sie dies aus

var CoreList = (from clnt in EntityName.sg_groups 
        join du in EntityName.client_disk_usage 
        on new { GrpId = clnt.sg_group_id, RoleId = clnt.group_role_id } equals new { GrpId = du.sg_group_id, RoleId = 3 } into LJ 
        from RT in LJ.DefaultIfEmpty() 
        where du.day_of_month == 15 && du.month_of_year == 05 && du.used_space_year == 2016 
        select new {clnt, du, RT} 
        ).ToList(); 

    var CoreListSet = CoreList.Select(i=> new YourEntityClass 
         { 
         //Fetch the ParentGroupId & UsedSpace 
         }).ToList(); 

    var CoreListComplete = (from cl in CoreListSet 
          join cust in EntityName.sg_groups 
          on cust.sg_group_id equals cl.parent_group_id).ToList(); 

nun die Summe von CoreListComplete erhalten & implementieren nur die Basis Wählen Sie Abfrage in Linq!

+0

Haben Sie versucht? @ tjackadams –

Verwandte Themen