2015-11-25 5 views
5

Also, ich habe diese SQL Abfrage nachzubilden versucht:Linq Abfragegruppe mit von und mit

select COUNT(*) as Total_2_Review 
from (
    select processed_image_id, count(*) as Total_Confirm from dbo.history 
    where action_id=104 
    group by processed_image_id 
    having count(*) > 1 
) as tbl 

mit Linq wie folgt:

var total2Review = (from h in secondDb.Histories.Where(i => i.ActionId == 104) 
        group h by new { h.ActionId, h.ProcessedImageId } into g 
        where g.Key.ActionId > 1 
        select g).Count(); 

Allerdings weiß ich es nicht sein sollte richtig, weil ich in meiner Gruppenklausel nicht die tatsächliche Anzahl größer als 1 auswähle.

Wie kann ich diese SQL-Abfrage als eine LINQ-Abfrage durchführen?

+0

Warum gruppieren Sie durch 'ActionId' in der Linq, wenn Sie nicht in der SQL sind? – juharr

Antwort

6

ändern Key.ActionId für .Count() im where nach dem group by:

var total2Review = (from h in secondDb.Histories.Where(i => i.ActionId == 104) 
        group h by new { h.ActionId, h.ProcessedImageId } into g 
        where g.Count()> 1 
        select g).Count(); 
+0

Oh Mann! Ich war so nah! Vielen Dank. Ich akzeptiere in einer Minute –

+0

Gern geschehen;) – octavioccl

7

LINQ macht keinen Unterschied zwischen Where und Having. Eine entsprechende SQL-Abfrage würde basierend auf Ihrer Platzierung der Where-Klausel generiert werden.

Hier ist, wie ich Ihre SQL-Abfrage in LINQ übersetzen würde:

var total2Review = secondDb.Histories 
    .Where(i => i.ActionId == 104) // This "Where" remains a "where" 
    .GroupBy(i => i.ProcessedImageId) 
    .Where(g => g.Count() > 1)  // This "Where" becomes "having" 
    .Count();      // This gets the overall count 
+0

Danke für die Erklärung –