2016-05-05 13 views
-2

Dieser Befehl meine SQL ist:muss ich SQL Linq konvertieren

select 
    b.Brand, 
    count(b.Brand) as BrandCount, 
    SUM(a.Qty) as DeviceCount 
from (
    select * from DeviceList 
) as a 
join DeviceMaster as b 
    on a.DeviceMasterId = b.Id 
group by b.Brand 

Hier ist, was ich bisher versucht habe:

var v1 = (from p in ghostEntities.DeviceMasters 
      join c in ghostEntities.DeviceLists on p.Id equals c.DeviceMasterId 
      select new table_Model { 
      Id = c.Id, 
      qty = c.Qty.Value, 
      month = c.DMonth, 
      brand = p.Brand, 
      model = p.Model, 
      memory = p.Memory 
      }).ToList(); 

ich die Werte bilden zwei Tabellen bin immer aber kann Gruppiere sie nicht oder füge die Werte hinzu.

+0

var v1 = (von p in ghostEntities.DeviceMasters beitreten c in ghostEntities.DeviceLists auf p.Id ist gleich c.DeviceMasterId neue table_Model wählen { Id = c.Id, Menge = c.Qty.Value, Monat = c.DMonth, Marke = p.Brand , Modell = p.Mod el, Speicher = p.Memory }). ToList(); –

+0

Ich bekomme die Werte aus zwei Tabellen ... aber kann sie nicht gruppieren oder die Werte hinzufügen .. –

Antwort

1

Sobald Sie Gruppe durch eine Tabelle, Sie Zugriff auf die Felder der anderen Tabelle in der Join-Operation verlieren, eine mögliche Abhilfe wäre:

var results = (from a in DeviceList 
       join b in DeviceMaster 
       on a.DeviceMasterId equals b.Id 
       group new { a, b } by new { b.Brand } into grp 
       select new 
       { 
        Brand = grp.Key.Brand, 
        BrandCount = grp.Count(), 
        DeviceCount = grp.Sum(x=> x.a.Qty.GetValueOrDefault()) 
       }).ToList(); 
+0

Hallo, die Marke und Brandcount funktioniert, aber die Anzahl der Geräte gibt einen Fehler. –

+0

Was ist der Fehler? – user3185569

+0

Kann den Typ 'int' nicht implizit konvertieren? zu "int". Eine explizite Umwandlung existiert (vermissen Sie eine Besetzung?) –

2

Sie sollten Gruppe hinzufügen, indem Sie in Ihre LINQ-Abfrage und verwenden Distinct() Count() und Sum() Aggregationsfunktionen:.

var query = from a in ghostEntities.DeviceList 
    join b in ghostEntities.DeviceMaster on a.DeviceMasterId equals b.Id 
    group b by b.Brand into g 
    select new { g.Key, count =g.Select(x => x.Brand).Distinct().Count(), sum = g.Sum(x => x.Qty) }; 

Sie eine Menge LINQ Proben bei https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b finden können, ich hoffe, dass es wird dir helfen.

+0

Eigentlich wird diese Zeile "g.Sum (x => x.Qty)" nicht kompilieren, x wird vom Typ DeviceMaster und sein nicht DeviceList – user3185569